在Go中设置全局条件变量

时间:2015-02-15 12:42:30

标签: variables go conditional

我想根据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(),并且不要使用#39 ; t每次调用mycheck()时都要读取和解析MYVAR。

3 个答案:

答案 0 :(得分:6)

完成你要做的事情的一种方法是在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")
    }
}

Playground

答案 1 :(得分:4)

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

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

playground

答案 2 :(得分:0)

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

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