go - 附加到地图结构中的切片
问题描述
我正在尝试附加到地图中的切片:
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"]
返回为该键存储的值的副本。因此,当您修改该副本的成员时,它不会反映在存储在地图中的副本上。
最简单的解决方案是将地图定义为:
map[string]*MyInnerStruct
这样,ms.inners["a"]
返回一个指向存储在映射中的值的指针。另一种解决方案是:
x:=ms.inners["a"]
x.list = myCurrentList
ms.inners["a"]=x
这会将存储在映射中的结构复制到x
,对其进行修改,然后将其复制回来。
推荐阅读
- flutter - 颤振屏幕导航
- flutter - 如何使用颤振在oneSignal中查看特定用户的通知历史记录
- html - 如何在 html 中动态添加预览或选择字体以获取 google app script html 文件中的字体大小和字体类型
- node.js - 如何在 Nodejs 中使用 gRPC 流式传输字节?
- tensorflow - 我正在读一本关于深度学习的书,但我无法理解这部分关于 Conv2D 的内容
- quarkus - 将 Message 转换为 Multi 时使用 Mutiny 管理确认
- flutter - Flutter apk-release 显示黑屏和灰屏
- python - Python Django 编辑记录功能不适用于 Jquery Ajax
- redux - 在 Next.js / Redux 页面之间切换时页面不断重绘
- c# - 如何在运行时从另一个类中的泛型方法获取类名?