什么是 C 的三元运算符的惯用 Go 等价物?

新手上路,请多包涵

在 C/C++(以及该系列的许多语言)中,根据条件声明和初始化变量的常见习惯使用三元条件运算符:

 int index = val > 0 ? val : -val

Go 没有条件运算符。实现与上面相同的一段代码的最惯用的方法是什么?我来到以下解决方案,但它似乎很冗长

var index int

if val > 0 {
    index = val
} else {
    index = -val
}

有更好的东西吗?

原文由 Fabien 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 648
2 个回答

正如所指出的(希望不出所料),使用 if+else 确实是在 Go 中执行条件的 惯用方法

除了完整的 var+if+else 代码块之外,这种拼写也经常使用:

 index := val
if 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)

编译器会内联这些简单的函数,所以它更快、更清晰、更短。

原文由 Gustavo Niemeyer 发布,翻译遵循 CC BY-SA 3.0 许可协议

No Go 没有三元运算符,使用 if/else 语法 惯用的方式。

为什么 Go 没有 ?: 运算符?

Go 中没有三元测试操作。您可以使用以下方法来获得相同的结果:

 if expr {
    n = trueVal
} else {
    n = falseVal
}

Go 中缺少 ?: 的原因是该语言的设计者已经看到该操作经常被用来创建难以理解的复杂表达式。 if-else 形式虽然更长,但无疑更清晰。一种语言只需要一个条件控制流结构。

— 常见问题 (FAQ) - Go 编程语言

原文由 ishaaq 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题