map 有哪些注意事项?
map 有哪些注意事项?
提示
题眼: key 的要求、遍历、读写习惯、并发问题
重要
参考答案:
我在使用 map 的时候,主要会注意四个方面。
第一,map 的 value 可以是任意类型,但 key 必须是可比较的类型。因为发生哈希冲突以后,底层最终还是要拿 key 再做一次判等。
第二,map 的遍历是无序的。即使你按 1、2、3 的顺序写进去,遍历时也不保证按这个顺序输出,所以不要依赖 map 的遍历顺序来做业务逻辑。
第三,读取 map 时最好使用 value, ok := m[key] 这种写法,这样能区分“这个键不存在”和“这个键存在但值刚好是零值”这两种情况。删除键时应该用 delete(m, key),而不是单纯把值改成零值。
第四,原生 map 不是并发安全的。如果多个协程同时读写同一个 map,可能会触发运行时错误,严重时会直接导致程序退出。所以并发场景下通常要加锁,或者使用 sync.Map。
