使用append往slice中添加一个值的时候,slice中的所有值均被修改

jason_dong · · 1501 次点击
map 是指针 你的area
#1
更多评论
for loop 中,value 的变量被重复使用了,就是说,你三次 ``` area["id"] area["value"] ``` 指向的都是同一片地址。 你在这里,可以这么修改: ``` for i, _ := range maps_temp { value := maps_temp[i] area["id"] = value["id"] area["value"] = value["value"] data = append(data, area) } ```
#2
抱歉,我没注意到楼主的语法错误,我刚才那样的修改是不对的。 ``` area["id"] = value["id"] area["value"] = value["value"] ``` 楼主这两句,坑了自己。你这两句实际上就是给 area 这个 map 的两个 key ,即 "id" "value" 反复的赋值,从始至终,你的 area 这个 map 就这两个 key-value 对。楼主知道问题在哪里了么。。 修改的话,一定不能把 "id" 这个字符串作为你的 key,要把 value["id"] 作为你的 key,value["value"] 作为你的 value,这样才能保证连续取到三个 key-value pair. ``` for i, _ := range maps_temp { value := maps_temp[i] id := strconv.Itoa(value["id"].(int)) v := value["value"] area[id] = v } data = append(data, area) fmt.Println("data:", data) ```
#3