变异映射中不存在的键与数组中的相似键

时间:2015-09-14 16:22:41

标签: go

我是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
}

但是为什么每次我需要从地图上获取某些东西时我都需要这样做?我认为地图就像关联数组,但这种行为真的很奇怪。

如何使用恐慌级别的密钥检查制作地图?

2 个答案:

答案 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)

  

如何使用恐慌级别的密钥检查制作地图?

你不能。