Go 没有条件运算符。实现与上面相同的代码段的最惯用的方法是什么?我来到了以下解决方案,但似乎很冗长
var index int
if val > 0 {
index = val
} else {
index = -val
}
有什么更好的吗?
MYYA
浏览 237回答 3
3回答
繁花不似锦
正如所指出的(并希望不出所料), usingif+else确实是在 Go 中执行条件的惯用方式。但是,除了完整var+if+else的代码块之外,这种拼写也经常使用:index := valif val <= 0 { index = -val}如果您有足够重复的代码块,例如相当于int value = a <= b ? a : b,您可以创建一个函数来保存它:func min(a, b int) int { if a <= b { return a } return b}...value := min(a, b)编译器会内联这些简单的函数,所以它更快、更清晰、更短。
No Go 没有三元运算符,使用 if/else 语法是惯用的方式。为什么 Go 没有 ?: 运算符?Go 中没有三元测试操作。您可以使用以下方法来获得相同的结果:if expr {
n = trueVal} else {
n = falseVal}?:Go 不存在的原因是语言的设计者已经看到该操作过于频繁地用于创建难以理解的复杂表达式。的if-else形式,虽然较长,无疑是更清晰。一种语言只需要一个条件控制流结构。— 常见问题 (FAQ) - Go 编程语言
假设您有以下三元表达式(在 C 中):int a = test ? 1 : 2;Go 中惯用的方法是简单地使用一个if块:var a intif test { a = 1} else { a = 2}但是,这可能不符合您的要求。就我而言,我需要一个代码生成模板的内联表达式。我使用了一个立即评估的匿名函数:a := func() int { if test { return 1 } else { return 2 } }()这确保不会同时评估两个分支。