在 Go 中设置全局条件变量
Settings global conditional variables in Go
我想根据 ENV var 的值在全局包级别在 Go 中有条件地解析和设置变量,这样我就不必每次都在实用程序函数中检查它(如该变量将在 运行 时间被声明一次)。比如我要完成的是(Go伪代码):
import (
"fmt"
"os"
"strconv"
)
// This works to read the value of MYVAR (=true/false)
var myvar string = os.Getenv("MYVAR")
// Apparently this is too much for Go
var myvarbool, _ = strconv.ParseBool(myvar)
// Utility function to check for value
func mycheck() {
if myvarbool {
fmt.Print("MYVAR is true")
}
}
这是一个库包,因此没有 main() 函数来执行此类设置,但我希望能够在库中的其他函数中使用 mycheck(),并且不要希望每次调用 mycheck() 时都必须读取和解析 MYVAR。
在真正考虑了几分钟之后,我意识到我可以创建一个包装函数来完成这项工作,然后调用它(同样,主要是伪代码,没有额外的检查):
var myenvbool bool = myenv("MYVAR")
func myenv(envvar string) bool {
myenvvalue := os.Getenv(envvar)
myenvbool, _ := strconv.ParseBool(myenvvalue)
return myenvbool
}
func checkenv() {
if myenvbool {
fmt.Print("myenvbool is true")
}
}
我不确定你遇到了什么问题,你的 OP 代码是有效的,你也可以在一行中使用它,比如:
var myvarbool, _ = strconv.ParseBool(os.Getenv("MYVAR"))
完成您想要做的事情的一种方法是在 init() 函数中处理环境变量,因此类似以下的方法会起作用:
package main
import (
"fmt"
"os"
"strconv"
)
var (
myvar string = os.Getenv("MYVAR")
myvarbool bool
)
func init() {
myvarbool, _ = strconv.ParseBool(myvar)
}
// Utility function to check for value
func mycheck() {
if myvarbool {
fmt.Print("MYVAR is true")
}
}
我想根据 ENV var 的值在全局包级别在 Go 中有条件地解析和设置变量,这样我就不必每次都在实用程序函数中检查它(如该变量将在 运行 时间被声明一次)。比如我要完成的是(Go伪代码):
import (
"fmt"
"os"
"strconv"
)
// This works to read the value of MYVAR (=true/false)
var myvar string = os.Getenv("MYVAR")
// Apparently this is too much for Go
var myvarbool, _ = strconv.ParseBool(myvar)
// Utility function to check for value
func mycheck() {
if myvarbool {
fmt.Print("MYVAR is true")
}
}
这是一个库包,因此没有 main() 函数来执行此类设置,但我希望能够在库中的其他函数中使用 mycheck(),并且不要希望每次调用 mycheck() 时都必须读取和解析 MYVAR。
在真正考虑了几分钟之后,我意识到我可以创建一个包装函数来完成这项工作,然后调用它(同样,主要是伪代码,没有额外的检查):
var myenvbool bool = myenv("MYVAR")
func myenv(envvar string) bool {
myenvvalue := os.Getenv(envvar)
myenvbool, _ := strconv.ParseBool(myenvvalue)
return myenvbool
}
func checkenv() {
if myenvbool {
fmt.Print("myenvbool is true")
}
}
我不确定你遇到了什么问题,你的 OP 代码是有效的,你也可以在一行中使用它,比如:
var myvarbool, _ = strconv.ParseBool(os.Getenv("MYVAR"))
完成您想要做的事情的一种方法是在 init() 函数中处理环境变量,因此类似以下的方法会起作用:
package main
import (
"fmt"
"os"
"strconv"
)
var (
myvar string = os.Getenv("MYVAR")
myvarbool bool
)
func init() {
myvarbool, _ = strconv.ParseBool(myvar)
}
// Utility function to check for value
func mycheck() {
if myvarbool {
fmt.Print("MYVAR is true")
}
}