【发布时间】:2021-08-10 11:44:30
【问题描述】:
假设有这样的代码sn-p。
mapper := make(map[int]SomeStructType)
mapper[0] = SomeStructType{}
somestruct := mapper[0] // load mapper[0] to 'somestruct'
在最后一行,这是否意味着mapper[0] 在所有情况下都被复制到somestruct,即使somestruct 之后曾被用作只读常量?
如果是这样,有没有办法像在 C/C++ 中一样对地图元素(此处为 mapper[0])进行 引用,以便我可以通过别名引用它,同时避免不必要的对象复制?我试图创建一个指向地图元素的指针,但显然,Go 不允许我这样做。
【问题讨论】:
-
Go 中的地图值是不可可寻址的。建议将
int映射到指向结构的指针 -
好的,我试图避免使用指针类型的元素,因为我想以 JSON 格式导出地图,但似乎指针类型的元素也可以导出为 JSON 格式。 stackoverflow.com/questions/55813574/…
-
但是这个问题还是有一些观点的,比如我们不能在不强制 Go 进行复制的情况下为地图元素创建别名吗?
-
@GwangmuLee 不。地图元素可以重新分配,使指针无效。所以根本不允许。
-
“这是否意味着 mapper[0] 在所有情况下都被复制到 somestruct” Go 中的 每个 赋值都是一个副本。 “即使 somestruct 之后曾经用作只读常量”也没有这样的事情。 Go 的唯一常量是编译时常量。
标签: go