我有这样的数据结构:
type Snapshot struct {
Key string
Users []Users
}
snapshots := make(map[string] Snapshot, 1)
// then did the initialization
snapshots["test"] = Snapshot {
Key: "testVal",
Users: make([]Users, 0),
}
Users
是另一个结构。
然后,当我尝试在用户切片中添加一些新的 Users
值时,如下所示:
snapshots["test"].Users = append(snapshots["test"].Users, user)
我不断收到此错误:
cannot assign to struct field snapshots["test"].Users in map
还尝试了这里的解决方法 https://github.com/golang/go/issues/3117 就像这样:
tmp := snapshots["test"].Users
tmp = append(tmp, user)
snapshots["test"].Users = tmp
但没有运气,仍然是完全相同的错误。
并且还尝试用指针声明地图,所以: snapshots := make(map[string] *Snapshot, 1)
,仍然没有运气。
原文由 lnshi 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,对于这个问题,这篇文章中的解决方案 为什么在将值设置为结构作为映射中的值时出现“无法分配”错误? 工作得很好。
然后,终于想通了为什么在我已经更改为使用指针后我的案例仍然不起作用,请参考下面非常简单的代码:
你认为输出会是什么?我只是认为这一切都是:
3
,但实际上对于地图,输出将是0
然后在地图初始化过程中,我使用了一个 for 循环并使用这个值
len(snapshots)
,这意味着初始化过程永远不会运行……是的,就是这个原因。