繁体   English   中英

golang:如何将新的 map 分配给结构字段

[英]golang: How to assign a new map to a struct field

我正在迭代具有 map 字段的结构数组:

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是结构切片(而不是指向结构的指针切片), v是切片中项目的副本,因此更新不会更改原始内容。

要使此代码正常工作,您可以编写:

for i := range wrapper.Configs {
    v := &wrapper.Configs[i]
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM