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

我是 golang 的新手,关于改变地图的 Go 之旅的这一部分正在扼杀我的粉红色小马世界。


下面是问题的一个例子:


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

}

但是为什么我每次都需要在需要从地图中获取某些内容的每个地方都这样做?我认为映射类似于关联数组,但这种行为真的很奇怪。


如何制作带有恐慌级别的键检查的地图?


一只萌萌小番薯
浏览 163回答 2
2回答

MM们

确定地图中的零值不是由于键不存在而导致的唯一方法是“逗号,好的”习语 ( 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}

拉莫斯之舞

如何制作带有恐慌级别的键检查的地图?你不能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go