一尘不染

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

go

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

int index = val > 0 ? val : -val

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

var index int

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

有什么更好的吗?


阅读 160

收藏
2021-10-28

共1个答案

一尘不染

正如所指出的(希望不出所料), usingif+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)

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

2021-10-28