我有这样的数据结构:
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
然后,当我尝试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),仍然没有运气。
snapshots := make(map[string] *Snapshot, 1)
首先,对于这个问题,本文中的解决方案为什么在将值设置为结构中的值作为映射中的值时出现“无法分配”错误?工作完美。
然后,最后弄清楚了为什么我已经更改为使用指针之后,我的情况仍然无法使用,请参考以下非常简单的代码:
a := make([]int, 3) fmt.Println(len(a)) b := make(map[string]string, 3) fmt.Println(len(b))
认为输出将是什么?我只是以为一切都会是:3,但实际上对于地图而言,输出将是0
3
0
然后稍后在地图初始化过程中,我使用了for循环并使用此值len(snapshots),这意味着初始化过程将永远不会运行。
len(snapshots)
是的,这就是原因。