Go语言 如何分配第一个非空/nil值?

9q78igpj  于 11个月前  发布在  Go
关注(0)|答案(2)|浏览(101)

这可以在python / JavaScript中实现:

# Python:
a = ""
b = "test"
c = a or b # test

// javascript
a = "";
b = "test";
c = a || b; // test

字符串
在go中不做一些条件块也能做到这一点吗?到目前为止,我唯一能做到这一点的方法是使用条件块。

a := ""
b := "test"
var c
if a {
    c = a
} else {
    c = b
}


我想这是答案是“不,这不能做”,但我想我会问只是以防万一我错了.这里的例子是简化.变量ab可能已经定义很久以前.

iyr7buue

iyr7buue1#

来自golang FAQ,There is no ternary testing operation in Go. You may use the following to achieve the same result:

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

字符串

w7t8yxp5

w7t8yxp52#

Go 1.22

如果你想分配第一个非零值,从Go 1.22开始,你可以使用cmp.Or。它基本上就像JavaScript ??或某些数据库引擎中的COALESCE()函数中的“合并”运算符。

package main

import (
    "cmp"
    "fmt"
)

func main() {
    var a = ""
    var b = "test"

    c := cmp.Or(a, b)
    
    fmt.Println(c) // test
}

字符串
显然,你也可以赋值给一个现有的变量;它可以方便地简化“if-nil-assign”习惯用法:

var a = ""
var b = "test"

a = cmp.Or(a, b)
// a is now "test"


该函数是可变参数的,因此它可以接受任意数量的参数。唯一的问题是它在T comparable中也是泛型的,因此在示例化后,varargs必须具有相同的类型。有关此详细信息,请参阅任何/interface{}作为约束与参数类型之间的区别?

相关问题