如何做一行if else语句?

新手上路,请多包涵

请参阅@accdias 指出的 https://golangdocs.com/ternary-operator-in-golang (见评论)

我可以像在 php 中那样在 go (golang) 中编写带有变量赋值的简单 if-else 语句吗?例如:

 $var = ( $a > $b )? $a: $b;

目前我必须使用以下内容:

 var c int
if a > b {
    c = a
} else {
    c = b
}

抱歉,我不记得这个控制语句的名称,而且我无法在现场或通过谷歌搜索找到信息。 :/

原文由 thoroc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

正如评论中提到的,Go 不支持三元内衬。我能想到的最短形式是这样的:

 var c int
if c = b; a > b {
    c = a
}

但请不要那样做,这是不值得的,只会让阅读你代码的人感到困惑。

原文由 Not_a_Golfer 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如其他人提到的, Go 不支持三元单行。但是,我写了一个实用函数,可以帮助您实现您想要的。

 // IfThenElse evaluates a condition, if true returns the first parameter otherwise the second
func IfThenElse(condition bool, a interface{}, b interface{}) interface{} {
    if condition {
        return a
    }
    return b
}

这里有一些测试用例来展示如何使用它

func TestIfThenElse(t *testing.T) {
    assert.Equal(t, IfThenElse(1 == 1, "Yes", false), "Yes")
    assert.Equal(t, IfThenElse(1 != 1, nil, 1), 1)
    assert.Equal(t, IfThenElse(1 < 2, nil, "No"), nil)
}

为了好玩,我写了更多有用的实用函数,例如:

 IfThen(1 == 1, "Yes") // "Yes"
IfThen(1 != 1, "Woo") // nil
IfThen(1 < 2, "Less") // "Less"

IfThenElse(1 == 1, "Yes", false) // "Yes"
IfThenElse(1 != 1, nil, 1)       // 1
IfThenElse(1 < 2, nil, "No")     // nil

DefaultIfNil(nil, nil)  // nil
DefaultIfNil(nil, "")   // ""
DefaultIfNil("A", "B")  // "A"
DefaultIfNil(true, "B") // true
DefaultIfNil(1, false)  // 1

FirstNonNil(nil, nil)                // nil
FirstNonNil(nil, "")                 // ""
FirstNonNil("A", "B")                // "A"
FirstNonNil(true, "B")               // true
FirstNonNil(1, false)                // 1
FirstNonNil(nil, nil, nil, 10)       // 10
FirstNonNil(nil, nil, nil, nil, nil) // nil
FirstNonNil()                        // nil

如果你想使用其中任何一个,你可以在这里找到它们 https://github.com/shomali11/util

原文由 Raed Shomali 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题