arrays - Append for array of maps raplaces all previous array items on the 最新的一个

标签 arrays go append

这个问题听起来可能很愚蠢,但我真的不明白哪里出了问题。

我想像这样创建一个 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/

相关文章:

javascript - 将某些数组元素移到数组前面

python - np 数组变量的名称作为字符串

javascript - 如何通过正则表达式模式匹配对字符串数组中的元素进行排序

json - 使用无键数组的答案在 Golang 中解析 JSON

python - 使用追加构建二维数组

javascript - 根据数组项对象属性值查找数组的索引值

nginx - 在 Phusion Passenger 后面运行一个 Go 网络服务器

戈朗 : Shared communication in async http server

javascript - 如何在不使用库的情况下在 JavaScript 中的另一个元素之后插入一个元素?

javascript - 使用 jQuery append 字形 - 未出现