如何从地图上删除选定的键?delete()如下面的代码所示,与范围结合使用是否安全?
delete()
package main import "fmt" type Info struct { value string } func main() { table := make(map[string]*Info) for i := 0; i < 10; i++ { str := fmt.Sprintf("%v", i) table[str] = &Info{str} } for key, value := range table { fmt.Printf("deleting %v=>%v\n", key, value.value) delete(table, key) } }
https://play.golang.org/p/u1vufvEjSw
这很安全!您还可以在Effective Go中找到类似的示例:
for key := range m { if key.expired() { delete(m, key) } }
和语言规范:
未指定地图的迭代顺序,并且不能保证每次迭代之间都相同。如果 在迭代过程 中 删除 尚未到达的地图条目,则不会生成相应的迭代值。如果映射条目是 在迭代过程 中 创建的 ,则该条目可能在迭代过程中产生或可以被跳过。对于创建的每个条目以及从一个迭代到下一个迭代,选择可能有所不同。如果映射为nil,则迭代次数为0。