在 Go 中设置全局条件变量

我想根据 ENV 变量的值在全局包级别在 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。


慕运维8079593
浏览 173回答 3
3回答

四季花海

完成您要执行的操作的一种方法是在 init() 函数中处理环境变量,因此可以使用以下方法:package mainimport (    "fmt"    "os"    "strconv")var (    myvar string = os.Getenv("MYVAR")    myvarbool bool)func init() {    myvarbool, _ = strconv.ParseBool(myvar)}// Utility function to check for valuefunc mycheck() {    if myvarbool {        fmt.Print("MYVAR is true")    }}

至尊宝的传说

我不确定您遇到了什么问题,您的 OP 代码有效,您也可以将其放在一行中,例如:var myvarbool, _ = strconv.ParseBool(os.Getenv("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")    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go