附加到地图中结构中的切片
Appending to a slice in a struct in a map
我正在尝试附加到地图中的切片:
type MyOuterStruct struct{
name string
inners map[string]MyInnerStruct
}
type MyInnerStruct struct{
name string
list []int
}
func main() {
ms := MyOuterStruct{
name: "outer",
inners: map[string]MyInnerStruct{
"a": {name: "inner"},
},
}
ms.inners["a"].list = append(ms.inners["a"].list, 4, 5, 6)
fmt.Println(ms.inners["a"].list)
//cannot assign to struct field ms.inners["a"].list in map
}
我知道问题是我正在分配给一个“无法寻址”的字段,但我不确定如何正确构建它。
我尝试了以下方法
myCurrentList := ms.inners["a"].list
myCurrentList = append(myCurrentList, 4, 5, 6)
ms.inners["a"].list = myCurrentList
但这也不正确。
我应该如何构造 MyInnerStruct
以便我可以访问动态切片 list
而不是我可以追加到?
问题是 ms.inners["a"]
returns 为该键存储的值的副本。因此,当您修改该副本的成员时,它不会反映在地图中存储的副本上。
最简单的解决方案是将地图定义为:
map[string]*MyInnerStruct
这样,ms.inners["a"]
returns 指向存储在映射中的值的指针。另一种解决方案是:
x:=ms.inners["a"]
x.list = myCurrentList
ms.inners["a"]=x
这会将映射中存储的结构复制到 x
,对其进行修改,然后将其复制回来。
我正在尝试附加到地图中的切片:
type MyOuterStruct struct{
name string
inners map[string]MyInnerStruct
}
type MyInnerStruct struct{
name string
list []int
}
func main() {
ms := MyOuterStruct{
name: "outer",
inners: map[string]MyInnerStruct{
"a": {name: "inner"},
},
}
ms.inners["a"].list = append(ms.inners["a"].list, 4, 5, 6)
fmt.Println(ms.inners["a"].list)
//cannot assign to struct field ms.inners["a"].list in map
}
我知道问题是我正在分配给一个“无法寻址”的字段,但我不确定如何正确构建它。
我尝试了以下方法
myCurrentList := ms.inners["a"].list
myCurrentList = append(myCurrentList, 4, 5, 6)
ms.inners["a"].list = myCurrentList
但这也不正确。
我应该如何构造 MyInnerStruct
以便我可以访问动态切片 list
而不是我可以追加到?
问题是 ms.inners["a"]
returns 为该键存储的值的副本。因此,当您修改该副本的成员时,它不会反映在地图中存储的副本上。
最简单的解决方案是将地图定义为:
map[string]*MyInnerStruct
这样,ms.inners["a"]
returns 指向存储在映射中的值的指针。另一种解决方案是:
x:=ms.inners["a"]
x.list = myCurrentList
ms.inners["a"]=x
这会将映射中存储的结构复制到 x
,对其进行修改,然后将其复制回来。