为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中设置全局条件变量

在 Go 中设置全局条件变量

Go
慕运维8079593 2021-09-13 16:50:38
我想根据 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 Govar myvarbool, _ = strconv.ParseBool(myvar)// Utility function to check for valuefunc mycheck() {    if myvarbool {        fmt.Print("MYVAR is true")    }}这是一个库包,所以没有 main() 函数来做这种设置,但我希望能够在库中的其他函数中使用 mycheck(),并且不想阅读并在每次调用 mycheck() 时解析 MYVAR。
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

完成您要执行的操作的一种方法是在 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")

    }

}


查看完整回答
反对 回复 2021-09-13
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我不确定您遇到了什么问题,您的 OP 代码有效,您也可以将其放在一行中,例如:

var myvarbool, _ = strconv.ParseBool(os.Getenv("MYVAR"))


查看完整回答
反对 回复 2021-09-13
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

在实际考虑了几分钟之后,我意识到我可以创建一个包装函数来完成这项工作,然后调用它(同样,主要是伪代码,无需额外检查):


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")

    }

}


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信