英文:
How to use OR operator properly in Golang
问题
如何在Golang中简化这个代码:
var planningDate string
date, ok := data["planningDate"]
if !ok {
planningDate = util.TimeStamp()
} else {
planningDate = date
}
谢谢。
英文:
How can i do this simplified in Golang
var planningDate string
date, ok := data["planningDate"]
if !ok {
planningDate = util.TimeStamp()
} else {
planningDate = date
}
Thanx
答案1
得分: 3
我在一行代码中没有找到任何方法来实现这个,因为Go语言中没有三元运算符。你也不能使用|
,因为操作数不是数字。不过,以下是一个三行代码的解决方案(假设date
只是一个临时变量):
planningDate, ok := data["planningDate"]
if !ok {
planningDate = util.TimeStamp()
}
英文:
I don't see any way to do this in a single line, as there is no ternary operator in Go. You cannot use |
either as operands are not numbers. However, here is a solution in three lines (assuming date
was just a temporary variable):
planningDate, ok := data["planningDate"]
if !ok {
planningDate = util.TimeStamp()
}
答案2
得分: 2
你可以这样做:
func T(exp bool, a, b interface{}) interface{} {
if exp {
return a
}
return b
}
// 在需要的时候可以像三元运算符一样使用它:
planningDate = T(ok, date, util.TimeStamp())
这段代码定义了一个函数 T
,它接受一个布尔表达式 exp
和两个接口类型的参数 a
和 b
。如果 exp
为真,函数返回 a
,否则返回 b
。你可以在需要的地方使用这个函数,就像使用三元运算符一样。在你的例子中,planningDate
的值将根据 ok
的值来确定,如果 ok
为真,planningDate
将被赋值为 date
,否则将被赋值为 util.TimeStamp()
。
英文:
You can do something like:
func T(exp bool, a, b interface{}) interface{} {
if exp {
return a
}
return b
}
and use it whenever you want, like a ternary-operator:
planningDate = T((ok), date, util.TimeStamp())
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论