一尘不染

Go 声明中的“_,”(下划线逗号)是什么?

go

我似乎无法理解这种变量声明:

_, prs := m["example"]

_,“到底在做什么以及为什么他们声明了这样的变量而不是

prs := m["example"]

阅读 207

收藏
2021-11-25

共1个答案

一尘不染

它避免了必须为返回值声明所有变量。
它被称为空白标识符

如:

_, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate

这样,你就不必声明一个你不会使用的变量:Go 不会允许它。相反,使用“_”来忽略所述变量。

由于它会丢弃返回值,因此当您只想检查一个返回值时很有帮助

_, present := timeZone[tz]

要测试地图中是否存在而不用担心实际值,您可以使用空白标识符,一个简单的下划线 ( _)。
可以使用任何类型的任何值分配或声明空白标识符,并无害地丢弃该值。
要测试地图中的存在,请使用空白标识符代替值的常用变量。

正如在评论中)添加的那样:

“普遍接受的标准”是将成员资格测试变量称为“ok”(与检查通道读取是否有效相同)

这允许您将它与测试结合起来:

if _, err := os.Stat(path); os.IsNotExist(err) {
    fmt.Printf("%s does not exist\n", path)
}

你会发现它也在循环中:

如果您只需要范围中的第二项(值),请使用空白标识符(下划线)来丢弃第一项:

sum := 0
for _, value := range array {
    sum += value
}
2021-11-25