【Go】sync.Map在遍历时删除元素是安全的

var tsm sync.Map

tsm.Store("k1", "v1")
tsm.Store("k2", "v2")
tsm.Store("k3", "v3")
tsm.Store("k4", "v4")
tsm.Store("k5", "v5")

// 需继续迭代,Range 回调函数应返回 true
// 需终止迭代,Range 回调函数应返回 false
tsm.Range(func(key, value interface{}) bool {
	k, _ := key.(string)
	if k == "k2" || k == "k4" {
		tsm.Delete(key)
	}
	return true
})

tsm.Range(func(key, value interface{}) bool {
	k, _ := key.(string)
	v, _ := value.(string)
	println(k, v)
	return true
})

你可能感兴趣的:(go)