Go 如何使用“变量赋值”;或;

Go 如何使用“变量赋值”;或;,go,Go,是否可能,以及如何使用这种逻辑进行一行(或简短)var分配: a:=b(或者如果b为false、nil或undefined,那么a等于“hello” 我试图做到: a:=b |“你好” 但得到一个错误:“运算符|未在字符串上定义” 因此,我来自JS,并试图实现: const a = b || "hello"; 但以“走的方式” 由于它是静态类型的Lang,我的意思是,如果b==“”(空字符串)就没有这样的Go语法。使用if语句 |的操作数必须是整数。|的操作数必须是布尔数 而且,字符串不能

是否可能,以及如何使用这种逻辑进行一行(或简短)var分配:

a:=b(或者如果b为false、nil或undefined,那么a等于“hello”
我试图做到:

a:=b |“你好”
但得到一个错误:“运算符|未在字符串上定义”

因此,我来自JS,并试图实现:

const a = b || "hello";
但以“走的方式”


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

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

|
的操作数必须是整数。
|
的操作数必须是布尔数

而且,
字符串
不能是
false
nil

假设这是为环境变量提供默认值,那么测试应该是来自的布尔返回值,而不是字符串值。使用如下函数:

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

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

我解决这个问题的方法是定义一个函数来实现它,如下所示:

func getenv(key string, def string) string {
     val, ok := os.LookupEnv(key)
     if !ok {
         val = def
     }
     return val
}
func getenv(key, fallback string) string {
    value := os.Getenv(key)
    if len(value) == 0 {
        return fallback
    }
    return value
}
当我调用此函数时,它看起来就像“or”一样简洁:

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

您可以根据自己的用例定义自己的函数。

我认为自己的函数很好,但golang有自己的方法来管理标志,这里就是一个例子

import (
    "flag"
)

func main() {    
    env := flag.String("env", "dev", "description")
}
因此,这里env的默认值是
dev
,您可以通过

go run main.go -env=prod

这是go,不是JS。Go是静态类型的。所以在这一点上,b不能是未定义的,它可以是nil(这意味着它是指针或引用类型之一),也可以是false,这意味着它是bool。所以你想做的是不可能的,在围棋中没有多大意义。主要是因为值是类型不变的。也就是说,如果
b
是一个字符串,那么它不能是nil、false、undefined或nan或其他定义的类型,它必须是一个字符串。至于智能声明和语法糖,Go不会让你太高兴。考虑到你的目标,请看Cerise Limón,在这个特殊的例子中,是的,但一般来说,我一直在搜索所需的语法(但正如许多人所说,这在语言中是不可能的)哦,是的,谢谢,我需要它正是为了定义Env vars的默认值