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

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

_, prs := m["example"]

“ _,”究竟是做什么的,为什么他们声明了一个这样的变量而不是

prs := m["example"]


白衣染霜花
浏览 338回答 3
3回答

人到中年有点甜

它避免了必须为返回值声明所有变量。它被称为空白标识符。如:_, 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 := 0for _, value := range array {    sum += value}

暮色呼如

Go 编译器不允许您创建从未使用过的变量。for i, value := range x {   total += value}上面的代码将返回一个错误信息“我已声明但未使用”。由于我们不在循环中使用 i ,因此需要将其更改为:for _, value := range x {   total += value}

MYYA

_是空白标识符。这意味着它应该分配的值被丢弃。这里是example被丢弃的key的值。第二行代码将丢弃存在布尔值并将值存储在prs.所以只检查地图中的存在,您可以丢弃该值。这可用于将地图用作集合。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go