gpt4 book ai didi

go - 在 Go 中的 Javascript 变量声明中模拟 OR 运算符

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:14 24 4
gpt4 key购买 nike

当我声明一个变量时,我想在 Go 中模拟 OR | 运算符。因此,当值未显示时返回右手边:

port := strconv.Itoa(os.Getenv("PORT")) | "8080"

我怎样才能做到这一点?

最佳答案

你不能在 Go 中这样使用 |||

| 是一个 Arithmetic operator并且仅适用于数值并且 ||Logical operator , 并且仅适用于 bool 值。

Go 没有 JavaScript 中的“真实”或“虚假”概念;例如 if "some_string"if 0 是无效的。您需要明确地使用与 ==> 的比较:if 0 == 0if "some_string"= = "".


Itoa总是返回一个字符串,os.GetEnv 也是如此,它被记录为返回一个字符串和:

It returns the value, which will be empty if the variable is not present.

“空”是一个“空字符串”。在 Go 中,字符串始终是字符串;只有有限的一组值,例如指针和 error 可以与 nil 进行比较(而像字符串这样的原语则不能)。

它永远不会返回数字类型(例如 int),因此将其输出传递给 Itoa 总是错误的。


您可能想要的是 Atoi ,它返回一个错误作为第二个返回值:

port, err := strconv.Atoi(os.Getenv("PORT"))
if err != nil {
fmt.Println("unable to get PORT environment variable, falling back to 8080")

// Use =, not :=
// Otherwise it'll create new port variable local to this if block.
// Common mistake for beginners and even experienced programmers.
port = 8080
}

或者:

port := 8080
if os.Getenv("PORT") != "" {
var err error
port, err = strconv.Atoi(os.Getenv("PORT"))
if err != nil {
fmt.Fprintf(os.Stderr, "error: unable to get PORT environment variable: %v\n", err)
os.Exit(1)
}
}

如果您在想“哎呀,与我的 JavaScript 单行代码相比,这太冗长了!”那你是对的。部分原因在于静态语言与动态语言的性质,部分原因在于 Go 非常明确且易于阅读的性质。

但作为返回,您可以获得类型安全性和可读性:-)

关于go - 在 Go 中的 Javascript 变量声明中模拟 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44118191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com