我正在迭代具有映射字段的结构数组:
type Config struct {
// ... some other fields
KV map[string]interface{} `json:"kv"`
}
在测试文件中,我知道KV
是空的,所以我正在迭代 Config
的数组对象并为其分配新 map :
for _, v := range wrapper.Configs { // I know this is length > 0
newMap := map[string]interface{}{
"key1": "val1",
"key2": "val2",
"key3": "val3",
}
v.KV = newMap // I have first tried directly assigning. Didn't work, tried copy - didn't work either
}
for _, v := range wrapper.Configs {
fmt.Println(v.KV)
}
但是在循环之后,KV
始终为空。
我也尝试过:
for _, v := range wrapper.Configs { // I know this is length > 0
v.KV = make(map[string]interface{})
newMap := map[string]interface{}{
"key1": "val1",
"key2": "val2",
"key3": "val3",
}
for kk, vv := range newMap {
v.KV[kk] = vv
}
我无法确定如何正确且有效地执行此操作。
搜索了很多,但我的搜索词给了我不相关的结果。
最佳答案
假设wrapper.Configs是一个结构体 slice (而不是指向结构体的指针 slice ),v
是 slice 中项目的副本,因此更新不要改变原来的。
要使此代码正常工作,您可以编写:
for i := range wrapper.Configs {
v := &wrapper.Configs[i]
...
}
关于dictionary - golang : How to assign a new map to a struct field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70610629/