每次使用var时如何调用func

我如何重写下面的代码,以便在每次CsvVersion调用 func时使用 var并为我提供最新值?

package main

import (
    "fmt"
    "os"
)

var (
    DefaultValMap = map[string]string{
        "CSV_VERSION": "v1",
    }

    CsvVersion = GetEnvOrDefault("CSV_VERSION")
)

func GetEnvOrDefault(env string) string {
    if val := os.Getenv(env); val != "" {
        return val
    }

    return DefaultValMap[env]
}

func main() {
    fmt.Println(CsvVersion)
    os.Setenv("CSV_VERSION", "v2")
    fmt.Println(CsvVersion)
    fmt.Println(os.Getenv("CSV_VERSION"))
}

实际产量

$ go build 1.go && ./1 
v1
v1
v2

输出应该是这样的

$ go build 1.go && ./1 
v1
v2
v2

回答

在 Go 中没有办法做到这一点。Go 的设计非常巧妙,它避免了像这样的“魔法”。相反,不要使用变量,而是使用函数:

func CsvVersion() string {
    return GetEnvOrDefault("CSV_VERSION")
}

但是请注意:在程序启动后(通常)不可能更改环境变量(程序本身除外,它的实用性非常有限),因此在每次使用时检查 env 变量通常只是浪费精力。在此处阅读更多相关信息。


以上是每次使用var时如何调用func的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>