2023-02-28 02:28:06
Golangmap、sync.map知识点汇总:
关于Golang的map: nil map:声明但未初始化的map是一个nil map,此时不能直接对其赋值。 取值:对于nil map,可以取值,但总是返回零值。获取不存在key对应的值时,返回零值,且可以通过第二个返回值判断键值是否存在。 线程安全性:map是线程不安全的,并发读写操作会引发错误。 遍历无序性:map的遍历是无序的,这主要是因为自动扩容或添加随机元素导致的。写数据时并未单独维护键值对顺序,且扩容可能会改变元素位置。若需顺序读取map,可以先对map中的key进行排序,再遍历。 底层实现:map的底层实现基于散列表,包含hmap和bucket结构体,使用链地址法解决哈希冲突。
关于sync.map: 线程安全性:sync.map支持并发读写,这是因为其底层数据结构与普通map不同。 底层数据结构:sync.map通过维护两个数据结构——read和dirty,来实现线程安全。
这些知识点是理解和使用Golang中map和sync.map的基础,掌握它们有助于编写更高效、安全的并发程序。