var data = make([]map[string]interface{}, 0)
var area = make(map[string]interface{})
maps_temp := []map[string]interface{}{{"id":1, "value":"a"},{"id":2, "value":"b"},{"id":3, "value":"c"}}
for _, value := range maps_temp {
area["id"] = value["id"]
area["value"] = value["value"]
data = append(data, area)
}
fmt.Println("data:",data)
The result is
data: [map[id:3 value:c] map[id:3 value:c] map[id:3 value:c]]
expected result is :
data: [map[id:1 value:a] map[id:2 value:b] map[id:3 value:c]]
抱歉,我没注意到楼主的语法错误,我刚才那样的修改是不对的。
```
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
更多评论
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