1、为什么 map 并发不安全:扩容过程中,若多个 goroutine 同时修改 map(如增删键值对),可能导致 oldbuckets 和 buckets 指针的竞争,引发数据不一致或崩溃。需使用 sync.Map(适用于读多写少场景)或手动加锁(如 sync.Mutex)。
2、为什么 map 是无序的?扩容时,键值对会被重新哈希到新的 bucket 中(或溢出桶),导致顺序改变。Go 官方有意不保证顺序,避免开发者依赖不可靠的特性。
1、为什么 map 并发不安全:扩容过程中,若多个 goroutine 同时修改 map(如增删键值对),可能导致 oldbuckets 和 buckets 指针的竞争,引发数据不一致或崩溃。需使用 sync.Map(适用于读多写少场景)或手动加锁(如 sync.Mutex)。
2、为什么 map 是无序的?扩容时,键值对会被重新哈希到新的 bucket 中(或溢出桶),导致顺序改变。Go 官方有意不保证顺序,避免开发者依赖不可靠的特性。