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

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

int index = val > 0 ? val : -val

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

var index int

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

有什么更好的吗?


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

除了完整的var+if+else代码块外,该拼写还经常用于:

index := val
if val <= 0 {
    index = -val
}

并且如果您有足够重复的代码块,例如相当于int value = a <= b ? a : b int value = a <= b ? a : b ,你可以创建一个函数来保存它:

func min(a, b int) int {
    if a <= b {
        return a
    }
    return b
}

...

value := min(a, b)

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


没有Go没有三元运算符,使用if / else语法惯用的方式:http://golang.org/doc/faq#Does_Go_have_a_ternary_form


假设你有下面的三元表达式(用C表示):

int a = test ? 1 : 2;

Go中的惯用方法是简单地使用if块:

var a int

if test {
  a = 1
} else {
  a = 2
}

但是,这可能不符合您的要求。 就我而言,我需要一个代码生成模板的内联表达式。

我使用了一个立即评估的匿名函数:

a := func() int { if test { return 1 } else { return 2 } }()

这确保两个分支都不被评估。

链接地址: http://www.djcxy.com/p/7417.html

上一篇: What is the idiomatic Go equivalent of C's ternary operator?

下一篇: Make An Integer Null