在go中,将局部变量的指针存储在全局映射中安全吗?

问题描述 投票:0回答:1

我知道闭包功能保证了从函数返回的局部变量的指针可以安全地使用。但是如果指针没有返回怎么办?例如,只需将其保存在全局地图中即可:

type bigUnit struct {
    ...
}

var globalIndex = map[string]*bigUnit{}

func newBigUnit(id int, ...) {
    newOne := bigUnit{
        ...
    }
    globalIndex[id] = &newOne
}

newOne会保留到节目结束吗?

go closures
1个回答
0
投票

newOne
一个标识符,对于您的函数
newBigUnit
来说是本地的,无法从外部访问,所以从技术上来说是不行的。另外,由于您可以多次调用
newBigUnit
,那么它的值是多少?

您可能的意思是,是否将保留其地址存储在包可访问映射中的变量 - 是的,只要您不存储其他内容或删除它是可访问的条目,那么它就会保留。

通常,Go 垃圾收集器保证只要值可访问,就不会被收集。

© www.soinside.com 2019 - 2024. All rights reserved.