在Golang中添加密钥以映射的安全方法

时间:2018-06-25 12:19:49

标签: dictionary go

由于这个事实:

  

如果在迭代过程中创建了地图条目,则可能会生成该条目   在迭代过程中或可能被跳过。每个选择可能有所不同   创建条目,并从一个迭代到下一个迭代。

在迭代过程中添加键值来映射是不安全的:

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"密钥,有时却不会。

要使其始终生产,有什么解决方法?

1 个答案:

答案 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)
}