而且我似乎无法理解这种变量声明:
_, prs := m["example"]
到底在_,
做什么,为什么他们这样声明变量而不是
prs := m["example"]
(我发现它是Go by Example:Maps的一部分)
prs
可能代表“现在”。在你的例子的代码检查一个条目的存在或不存在"example"
在m
地图。
而且我似乎无法理解这种变量声明:
_, prs := m["example"]
到底在_,
做什么,为什么他们这样声明变量而不是
prs := m["example"]
(我发现它是Go by Example:Maps的一部分)
prs
可能代表“现在”。在你的例子的代码检查一个条目的存在或不存在"example"
在m
地图。
Answers:
它避免了必须为返回值声明所有变量。
它称为空白标识符。
如:
_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
由于它丢弃了返回值,因此在您只想检查返回的值之一时很有用,例如“ Effecture Go,map ”中所示的“ 如何测试映射中键的存在? ”:
_, 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
}
Go编译器不允许您创建从未使用过的变量。
for i, value := range x {
total += value
}
上面的代码将返回错误消息“我已声明并且未使用”。
由于我们不在循环中使用i,因此需要将其更改为:
for _, value := range x {
total += value
}