这个问题听起来可能很愚蠢,但我真的不明白哪里出了问题。
我想像这样创建一个 map 数组:
values := make([]map[string]string, 0)
然后我创建一些 map :
row := make(map[string]string)
row["item1"] = "value1"
row["item2"] = "value2"
然后将其追加到数组中:
values = append(values, row)
打印值现在给出:
[map[item1:value1 item2:value2]]
使用其他一些值做同样的事情:
row["item1"] = "value3"
row["item2"] = "value4"
values = append(values, row)
现在打印值给出:
[map[item1:value3 item2:value4] map[item1:value3 item2:value4]]
所以第一个数组项 = 第二个。 什么会导致这种情况?
完整代码:
package main
import "fmt"
func main() {
values := make([]map[string]string, 0)
row := make(map[string]string)
row["item1"] = "value1"
row["item2"] = "value2"
values = append(values, row)
fmt.Println(values)
row["item1"] = "value3"
row["item2"] = "value4"
values = append(values, row)
fmt.Println(values)
}
最佳答案
映射变量是指向映射的指针,因此假设您的行映射位于 0x50 内存地址中,那么您的值数组将是这样的
values := {{0x50}, {0x50}}
因此两者都将通过更改行来更改。 一个简单的方法是在第一次 println 之后再次重复制作行或更改第二张 map 的名称
关于arrays - Append for array of maps raplaces all previous array items on the 最新的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47307552/