为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
白衣染霜花 2021-09-10 16:56:36
我似乎无法理解这种变量声明:_, prs := m["example"]“ _,”究竟是做什么的,为什么他们声明了一个这样的变量而不是prs := m["example"]
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

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

它被称为空白标识符。


如:


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

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


(另一个“ _”用例用于导入)


由于它丢弃了返回值,因此当您只想检查返回值之一时,它会很有帮助,如“ Effective Go, map ”中所示的“ How to test key exist 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

}


查看完整回答
反对 回复 2021-09-10
?
暮色呼如

TA贡献1853条经验 获得超9个赞

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


for i, value := range x {

   total += value

}

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


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


for _, value := range x {

   total += value

}


查看完整回答
反对 回复 2021-09-10
?
MYYA

TA贡献1868条经验 获得超4个赞

_是空白标识符。这意味着它应该分配的值被丢弃。

这里是example被丢弃的key的值。第二行代码将丢弃存在布尔值并将值存储在prs.
所以只检查地图中的存在,您可以丢弃该值。这可用于将地图用作集合。


查看完整回答
反对 回复 2021-09-10
  • 3 回答
  • 0 关注
  • 337 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信