- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
当我声明一个变量时,我想在 Go 中模拟 OR |
运算符。因此,当值未显示时返回右手边:
port := strconv.Itoa(os.Getenv("PORT")) | "8080"
我怎样才能做到这一点?
最佳答案
你不能在 Go 中这样使用 |
或 ||
。
|
是一个 Arithmetic operator并且仅适用于数值并且 ||
是 Logical operator , 并且仅适用于 bool 值。
Go 没有 JavaScript 中的“真实”或“虚假”概念;例如 if "some_string"
或 if 0
是无效的。您需要明确地使用与 ==
、>
的比较:if 0 == 0
和 if "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/
我是一名优秀的程序员,十分优秀!