m := map[string]*Object {
"a": obj
}
go func(obj *Object) {
obj.Do()
}(m["a"])
delete(m, "a")
当obj
尚未完成时,GC会释放obj.Do()
的内存吗?
答案 0 :(得分:2)
代码将评估
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Request: " + XMLHttpRequest.responseText.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
将指针obj,然后obj将被放置在goroutine的新堆栈上,然后goroutine将以该堆栈启动,然后obj将从原始goroutine中的地图中删除。此时,新的goroutine堆栈将有一个指向obj的指针,因此obj将不会被gc'这样,直到第二个goroutine完成执行。