为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MYYA 2021-07-06 17:28:31
在 C/C++(以及该家族的许多语言)中,根据条件声明和初始化变量的常用习惯用法使用三元条件运算符:int index = val > 0 ? val : -valGo 没有条件运算符。实现与上面相同的代码段的最惯用的方法是什么?我来到了以下解决方案,但似乎很冗长var index intif val > 0 {    index = val} else {    index = -val}有什么更好的吗?
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

正如所指出的(并希望不出所料), 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-07-12
?
慕的地10843

TA贡献1785条经验 获得超8个赞

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

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

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

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

?:Go 不存在的原因是语言的设计者已经看到该操作过于频繁地用于创建难以理解的复杂表达式。的if-else形式,虽然较长,无疑是更清晰。一种语言只需要一个条件控制流结构。

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


查看完整回答
反对 回复 2021-07-12
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

假设您有以下三元表达式(在 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 } }()

这确保不会同时评估两个分支。


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 236 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信