而且我似乎无法理解这种变量声明:
_, prs := m["example"]
究竟在_,做什么,为什么他们这样声明变量而不是
_,
prs := m["example"]
(我发现它是Go by Example:Maps的一部分)
它避免了必须为返回值声明所有变量。 它称为 空白标识符 。
如:
_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
(另一个’ _‘用例用于导入)
_
由于它丢弃了返回值,因此在您只想检查返回的值之一时很有用,例如“ EffectureGo,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 }