每次使用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 变量通常只是浪费精力。在此处阅读更多相关信息。