由于这个事实:
如果在迭代过程中创建了地图条目,则可能会生成该条目 在迭代过程中或可能被跳过。每个选择可能有所不同 创建条目,并从一个迭代到下一个迭代。
在迭代过程中添加键值来映射是不安全的:
var m = make(map[string]int)
m["1"] = 1
m["2"] = 2
m["3"] = 3
for k, v := range m {
if strings.EqualFold( "2", k){
m["4"] = 4
}
fmt.Println(k, v)
}
有时会产生"4"
密钥,有时却不会。
要使其始终生产,有什么解决方法?
答案 0 :(得分:2)
使用要添加到原始地图的项目创建另一个地图,并在迭代之后将它们合并。
var m = make(map[string]int)
m["1"] = 1
m["2"] = 2
m["3"] = 3
var n = make(map[string]int)
for k := range m {
if strings.EqualFold("2", k) {
n["4"] = 4
}
}
for k, v := range n {
m[k] = v
}
for _, v := range m {
fmt.Println(v)
}