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