在 go 中,`_` 是空白标识符,用于丢弃不需要的返回值;`_, prs := m["example"]` 表示只关心 map 查找的第二个返回值(是否存在),而忽略第一个(实际值)。
Go 的 map 访问操作 m[key] 总是返回两个值:
因此,以下写法是非法的:
prs := m["example"] // ❌ 编译错误:multiple-value m["example"] in single-value context
因为 m["example"] 返回两个值,而 := 左侧只声明了一个变量,Go 不允许丢弃返回值而不显式处理——这正是空白标识符 _ 的设计目的。
✅ 正确用法是使用 _ 显式忽略不需要的值:
_, prs := m["example"] // ✅ 只关心键是否存在,忽略实际值
if prs {
fmt.Println("key exists")
}这种模式广泛应用于:
if _, ok := m["example"]; ok {
fmt.Println("found")
}_, y, _ := get3DPoint() // get3DPoint() 返回 (x, y, z),只取 y
sum := 0
for _, v := range []int{1, 2, 3} {
sum += v // 仅需值,忽略索引
}if _, err := os.Stat("/tmp/nonexistent"); os.IsNotExist(er
r) {
log.Println("path does not exist")
}⚠️ 注意事项:
总结:_ 是 Go 强制显式性设计的关键体现——它不让开发者“悄悄忽略”值,而是要求你主动声明放弃。这提升了代码意图的清晰度与健壮性,也是 Go “explicit is better than implicit” 哲学的典型实践。