Go 的 map 可以边遍历边删除吗?
这题要分情况分析。
-
若在不同协程内,map 不可以边遍历边删除。map 并不是一个线程安全的数据结构。同时读写一个 map 是未定义的行为,如果被检测到,会直接 panic。
-
若在同一个协程内,map 是可以边遍历边删除的:
for k := range m { delete(m, k) }但是不建议这样清空 map,建议为 map 重新赋值一个空 map。旧的 map 由 GC 回收。
Go 的 map 可以边遍历边删除吗?
这题要分情况分析。
若在不同协程内,map 不可以边遍历边删除。map 并不是一个线程安全的数据结构。同时读写一个 map 是未定义的行为,如果被检测到,会直接 panic。
若在同一个协程内,map 是可以边遍历边删除的:
for k := range m {
delete(m, k)
}
但是不建议这样清空 map,建议为 map 重新赋值一个空 map。旧的 map 由 GC 回收。