map
已收录文章:9篇
-
从 fatal error: concurrent map read and map write 的现场出发,演示如何用竞态检测确认问题,再比较读写锁、单 goroutine 所有权和分片 map 的适用边界。496 收藏
-
Go 1.21 引入的 clear 可以清空 map 或 slice,但两者的结果并不一样:map 保留对象并删除键值,slice 只把元素置为零值且长度容量不变。本文用缓存重建和批处理缓冲两个场景,说明 clear 的行为、引用影响、容量边界和可验证的复用写法。384 收藏
-
Go 在 range 遍历 map 时允许删除尚未访问的键,但遍历顺序本来就不稳定,新增元素也不能依赖是否会被访问。本文用小实验区分语言保证、实现现象和可测试的安全写法。384 收藏
-
Go 的 map 不能用 == 比较内容,只有和 nil 比较才合法。本文从可比较类型规则出发,拆解 len、reflect.DeepEqual 与排序后序列化三种校验方式的边界,并给出测试和生产代码中的选择建议。369 收藏
-
Go 的 map 可以在 range 遍历中删除当前键,但删除未到达的键会改变本轮可见结果,新增键则可能出现也可能被跳过。本文用可运行示例拆开这三个边界,并说明并发场景为什么仍然不安全。295 收藏
-
Golang · Go问答 | 2个月前 | 并发 · map · RWMutex · sync.Map · Go问答 · 数据竞争 RWMutex sync.Map map并发读写 Go问答 concurrent map read and map writeGo 原生 map 不是并发安全容器,只要一个 goroutine 写 map,同时另一个 goroutine 读或写同一个 map,就可能触发 concurrent map read and map write。生产代码要按访问模式选择 RWMutex、单协程归口或 sync.Map。291 收藏
-
Java Stream 使用 Collectors.toMap 收集数据时,双参数重载遇到相同 key 会抛出 IllegalStateException。若业务允许把两条记录压成一条,应明确传入合并函数并定义保留旧值、覆盖新值或择优规则;若重复本身有业务意义,应改用 groupingBy 保留完整列表。并行流还要评估合并成本与是否真的需要并发 Map。159 收藏
-
围绕一个 map 值从创建、写入、读取到删除的完整生命周期,解释 nil map 与空 map 的差异、并发访问为何需要同步,以及如何用最小检查确认修复有效。149 收藏
-
Go 1.21 引入的内置 clear 可以直接清空 map 或切片,但它不会让并发访问变安全,也不会替你决定是否复用底层存储。本文从请求缓存复用场景对比 delete 循环、重新 make 和 clear 的语义、容量与并发边界。137 收藏