我是golang的新手,这段关于Go mutating maps的游览正在杀死我的粉红色小马世界。
以下是问题的一个示例:
package main
import "fmt"
func main() {
a := make([]int, 10)
fmt.Println(a[123]) //panic: runtime error: index out of range, good
b := make(map[int]int, 10)
fmt.Println(b[123]) // 0 ? WHAAAT? Not nil, not panic?
}
我知道,我可以使用第二个值检查元素是否存在,如下所示:
v, ok := b[11]
if (!ok) {
// do something strange
}
但是为什么每次我需要从地图上获取某些东西时我都需要这样做?我认为地图就像关联数组,但这种行为真的很奇怪。
如何使用恐慌级别的密钥检查制作地图?
答案 0 :(得分:3)
确定地图中的零值不是由于密钥不存在的唯一方法是“逗号,确定”成语(v, ok := m[k]
)。如果您需要对不存在的密钥进行紧急响应,最好的方法是编写辅助函数。
func mapSafe(m map[string]int, key string) (i int) {
i, ok: = m[key]
if (!ok) {
panic("Key not in map")
}
return
}
答案 1 :(得分:1)
如何使用恐慌级别的密钥检查制作地图?
你不能。