gpt4 book ai didi

go - 使用 append 向 slice 添加一个新值并且 slice 的所有值都被更改

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:55 25 4
gpt4 key购买 nike

代码如下:

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

结果是:

data: [map[id:3 value:c] map[id:3 value:c] map[id:3 value:c]]

预期结果是:

data: [map[id:1 value:a] map[id:2 value:b] map[id:3 value:c]]

为什么?

最佳答案

这是因为您在每次迭代中更改 area["id"]area["value"] 的值 - 最后一个是“id” 3 和 c 的“值”。 data 中存储的每个 map[string]interface{} 都指向内存中的同一个对象。

您可以使用复合文字来获得所需的结果。

package main

import (
"fmt"
)

func main() {
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, map[string]interface{}{"id": value["id"], "value": value["value"]})
}

fmt.Println("data:", data)
}

Playground 上的来源:https://play.golang.org/p/kU4eHowh8N2

关于go - 使用 append 向 slice 添加一个新值并且 slice 的所有值都被更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49210374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com