我似乎无法理解这种变量声明:
_, prs := m["example"]
“_,
”到底是做什么的,为什么他们声明了这样的变量而不是
prs := m["example"]
(我发现它是Go by Example: Maps)
的一部分答案 0 :(得分:101)
它避免了必须为返回值声明所有变量 它被称为blank identifier。
如:
_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
(other '_
' use case is for import)
由于它会丢弃返回值,因此当您只想检查其中一个返回值时会很有帮助,例如“How to test key existence in a map?”中显示的“Effective Go, map”:
_, present := timeZone[tz]
要测试地图中的状态而不必担心实际值,可以使用空白标识符,一个简单的下划线(
_
)。
可以使用任何类型的任何值分配或声明空白标识符,并且无害地丢弃该值 要测试地图中的状态,请使用空白标识符代替值的常用变量。
由于Jsor添加in the comments:
“普遍接受的标准”是将成员资格测试变量称为“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
}
答案 1 :(得分:51)
Go编译器不允许您创建从未使用的变量。
for i, value := range x {
total += value
}
上面的代码将返回一条错误消息"我声明并且未使用"。
由于我们不在循环中使用i,因此需要将其更改为:
for _, value := range x {
total += value
}
答案 2 :(得分:4)
_
是空白标识符。意味着它应分配的值被丢弃。
这里是被丢弃的example
键的值。第二行代码将丢弃 presence 布尔值并将值存储在prs
中。
因此,只检查地图中的状态,您可以丢弃该值。这可用于将地图用作集合。
答案 3 :(得分:2)
未使用变量的最佳用例是只需要部分输出的情况。在下面的示例中,我们只需要打印值(州人口)。
package main
import (
"fmt"
)
func main() {
statePopulations := map[string]int{
"California": 39250017,
"Texas": 27862596,
"Florida": 20612439,
}
for _, v := range statePopulations {
fmt.Println(v)
}
}
答案 4 :(得分:1)
它被称为空白标识符,在您希望丢弃将要返回的值而不参考它的情况下提供帮助
我们使用它的一些地方:
答案 5 :(得分:1)
只要语法要求使用变量名但程序逻辑不需要,例如在仅要求元素值时丢弃不需要的循环索引,就可以使用空白标识符。
摘录自:
Go编程语言(Addison-Wesley专业计算系列)
Brian W. Kernighan
此材料可能受版权保护。
答案 6 :(得分:1)
基本上,_,
被称为空白标识符。在GO中,不能有未使用的变量。
作为实例,当您使用 value:= range 遍历数组时,不需要 i 值进行迭代。但是,如果省略i值,它将返回错误。但是,如果您声明i而不使用它,它也会返回一个错误。
因此,这是我们必须使用_,
的地方。
还可以在将来不希望函数的返回值时使用。
答案 7 :(得分:0)
Golang中不允许使用未使用的变量
如果您来自其他编程语言,可能很难适应这一点。但这会导致代码更简洁。因此,通过使用_
,我们是说我们知道那里有一个变量,但我们不想使用它,并告诉编译器不要抱怨我。 :)