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

eold的答案很有趣,很有创意,甚至可能很聪明。

不过,建议您改为:

var index int
if val > 0 {
    index = printPositiveAndReturn(val)
} else {
    index = slowlyReturn(-val)  // or slowlyNegate(val)
}

是的,他们都编译到本质上相同的程序集,但是这个代码比调用一个匿名函数更容易理解,只是为了返回可能已经写入变量的值。

基本上,简单明了的代码比创意代码更好。

另外,任何使用地图文字的代码都不是一个好主意,因为在Go中地图不是轻量级的。 自从Go 1.3开始,小地图的随机迭代顺序得到了保证,并且为了实施这一点,对于小地图来说,它在内存方面的效率要低得多。

因此,制作和删除大量小地图既耗费空间又耗时。 我有一段使用小地图的代码(可能有两个或三个键,但常见用例只有一个条目),但代码很慢。 我们谈论的速度至少比重写为使用双切片键[index] => data [index] map的相同代码慢3个数量级。 而且可能更多。 由于以前需要运行几分钟的一些操作,开始以毫秒为单位完成。\