根本问题是您无法获取地图中某物的地址。您可能会认为编译会重新安排
users[5].name = "Mark"为
(&users[5]).name = "Mark"
但这不能编译,给出此错误
cannot take the address of users[5]
这是为了让地图可以自由地随意重新排序,以有效地使用内存。
更改地图中实际内容的唯一方法是分配给地图,即
t := users[5]t.name = "Mark"users[5] = t
因此,我认为您要么必须使用上述副本,要么必须将指针存储在地图中。存储指针的缺点是使用更多的内存和更多的内存分配,这可能超过上面的复制操作-
只有您和您的应用程序才能知道这一点。
第三种选择是使用切片-如果您将原始语法更改
users := make(map[int]User)为
users := make([]User, 10)



