如果env var为空,如何指定默认值?

Rya*_*air 51 environment-variables go

在Gio中,如果未设置环境变量,如何分配默认值?

在Python中mongo_password = os.getenv('MONGO_PASS', 'pass'),pass如果MONGO_PASS没有设置env var,我可以在哪里做默认值.

我尝试了一个基于os.Getenv空的if语句,但由于if语句中的变量赋值范围,这似乎不起作用.我正在检查多个env var,所以我不能在if语句中对这些信息采取行动.

Sto*_*ica 79

没有内置功能可以回退到默认值,所以你必须做一个老式的if-else.

但是你总是可以创建一个辅助函数来使它更容易:

func getenv(key, fallback string) string {
    value := os.Getenv(key)
    if len(value) == 0 {
        return fallback
    }
    return value
}
Run Code Online (Sandbox Code Playgroud)

请注意,正如@ michael-hausenblas在评论中指出的那样,请记住,如果环境变量的值真的为空,那么您将获得回退值.

甚至更好,因为@ŁukaszWojciechowski指出,使用os.LookupEnv:

func getEnv(key, fallback string) string {
    if value, ok := os.LookupEnv(key); ok {
        return value
    }
    return fallback
}
Run Code Online (Sandbox Code Playgroud)

  • 而不是`Getenv`你可以使用`LookupEnv`.它还返回`ok boolean`状态,表示该值确实存在. (10认同)
  • 请注意,虽然上面的代码是正确的,但你应该知道语义:因为它测试字符串`value`的长度而空字符串`""`的长度为0意味着当env变量设置为`" "`你会得到后备/默认值而不是值(这是一个简单的""").真的取决于你的用例,但我认为值得指出,因为我曾经遇到过这个语义错误并烧了几个周期调试它;) (2认同)

pur*_*dox 24

您正在寻找的是os.LookupEnvif声明相结合.

这是janos的答案更新为使用LookupEnv:

func getEnv(key, fallback string) string {
    value, exists := os.LookupEnv(key)
    if !exists {
        value = fallback
    }
    return value
}
Run Code Online (Sandbox Code Playgroud)


Edd*_*dez 10

为了有一个干净的代码,我这样做:

myVar := getEnv("MONGO_PASS", "default-pass")
Run Code Online (Sandbox Code Playgroud)

我定义了一个在整个应用程序中使用的函数

// getEnv get key environment variable if exist otherwise return defalutValue
func getEnv(key, defaultValue string) string {
    value := os.Getenv(key)
    if len(value) == 0 {
        return defaultValue
    }
    return value
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*las 9

Go此处的功能与Python不完全相同;我可以想到,最惯用的方法是:

mongo_password := "pass"
if mp := os.Getenv("MONGO_PASS"); mp != "" {
    mongo_password = mp
}
Run Code Online (Sandbox Code Playgroud)