← 返回首页
Go中 Map可以边遍历边删除吗
map 并不是一个线程安全的数据结构。如果多个线程边遍历,边删除,同时读写一个 map 是未定义的行为,如果被检测到,会直接 panic。
如果是发生在多个协程同时读写同一个 map 的情况下。
如果在同一个协程内边遍历边删除,并不会检测到同时读写,理论上是可以这样做的。
但是,遍历的结果就可能不会是相同的了,有可能结果遍历结果集中包含了删除的 key,也有可能不包含,这取决于删除 key 的时间:是在遍历到 key 所在的 bucket 时刻前或者后。
这种情况下,可以通过加读写锁sync.RWMutex来保证。