如何使用“或”进行变量赋值

时间:2019-10-20 20:15:37

标签: go

是否有可能,以及如何使用这种逻辑进行单行(或简称为var)赋值:

a := b (or if b is false, nil or undifined, then a equals to) "hello"  

我试图做到:

a := b | "hello"

但出现错误:“运算符|未在字符串上定义”。

所以我来自JS,并且正在尝试实现:

const a = b || "hello";

但以“前进方式”

因为它是静态类型的Lang,所以我的意思是如果b ==“”(空字符串)

3 个答案:

答案 0 :(得分:5)

没有这样的Go语法。使用if语句。

|的操作数必须为整数。 ||的操作数必须为布尔值。

此外,string不能为falsenil

鉴于OP's actual goal将为环境变量提供默认值,则测试应基于os.LookupEnv的布尔返回值,而不是字符串值。使用如下函数:

func getenv(key string, def string) string {
     val, ok := os.LookupEnv(key)
     if !ok {
         val = def
     }
     return val
}

答案 1 :(得分:1)

在为Env变量定义默认值时,我也有类似的愿望。

我解决它的方法是定义一个函数来完成它,就像这样:

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

当我调用此函数时,它看起来就像“或”一样简洁:

port := getenv("PORT", "8000")

您可以为用例定义自己的功能。

答案 2 :(得分:0)

我认为做自己的功能很棒,但是golang有自己的方法来管理标志,这是一个例子

import (
    "flag"
)

func main() {    
    env := flag.String("env", "dev", "description")
}

因此,这里env的默认值为dev,您可以运行并更改它,

go run main.go -env=prod

致谢