golang map值由值或引用返回?

时间:2017-07-26 08:34:15

标签: go

让我有一个地图,其中包含字符串的键和指向结构的指针的值

type Entity struct{}
entity := &Entity{}
m := map[string]*Entity{"foo":entity}

我得到了值并稍后删除了该条目

en := m["foo"]
delete(m, "foo")

我的问题是,由于从地图中删除了指向它的指针,内存是否会被垃圾收集?另一方面,在删除条目之前,我有新指针 en ,它的指针副本也指向同一个内存位置,因此内存不会被垃圾收集甚至地图条目被删除?我很困惑,很感激。

1 个答案:

答案 0 :(得分:0)

Go的当前实现是一个parallel mark-and-sweep垃圾收集器。

准确地说,在声明entity的范围内,由于您提到的相同原因,此对象不会被收集 - 在从地图中删除后仍然存在对该对象的引用。

地图的状态是内部的,只有在删除操作后才会从那里删除。