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

新手上路,请多包涵

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

 _, prs := m["example"]

_, ”到底是做什么的,为什么他们声明这样的变量而不是

prs := m["example"]

(我发现它是 Go by Example: Maps 的一部分)

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

阅读 710
2 个回答

它避免了必须为返回值声明所有变量。

它被称为 空白标识符

如:

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

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

另一个’ _ ‘用例用于导入

由于它丢弃了返回值,因此当您只想检查一个返回值时它很有用,如“ Effective Go, map ”中所示的“ How to test key existence in a map? ”:

 _, present := timeZone[tz]

要测试地图中的存在而不用担心实际值,您可以使用空白标识符,一个简单的下划线 ( _ )。

空白标识符可以分配或声明任何类型的任何值,该值将被无害地丢弃。

要测试地图中的存在性,请使用空白标识符代替值的常用变量。

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

“普遍接受的标准”是调用成员测试变量“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
}

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

Go 编译器不允许您创建您从不使用的变量。

 for i, value := range x {
   total += value
}

上面的代码将返回错误消息“我已声明但未使用”。

由于我们不在循环中使用 i 我们需要将其更改为:

 for _, value := range x {
   total += value
}

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

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