为了账号安全,请及时绑定邮箱和手机立即绑定

垃圾收集是否会在使用前将指针释放到包级变量中?

垃圾收集是否会在使用前将指针释放到包级变量中?

Go
达令说 2022-12-26 10:27:06
我有一个配置对象,它在启动时根据环境变量初始化一些变量:// init the conf object on startup and fail quickly if there's an environment issue_ = utils.GetConf()这是在我的服务器的 init() 方法中,在我的代码的其他地方,我只是调用 GetConf() 来获取配置对象。我想通过单例模式实现这个配置对象:import (    "fmt"    env "github.com/Netflix/go-env")type Conf struct {    DBName        string `env:"MONGO_INITDB_DATABASE,required=true"`    Hostname      string `env:"HOSTNAME,required=true"`    DBUsername    string `env:"MONGO_INITDB_ROOT_USERNAME,required=true"`    DBPassword    string `env:"MONGO_INITDB_ROOT_PASSWORD,required=true"`}var gConf *Conffunc GetConf() *Conf {    if gConf != nil {        return gConf    }    gConf = new(Conf)    _, err := env.UnmarshalFromEnviron(gConf)    if err != nil {        panic(err)    }    return gConf}因为一开始我没有对 utils.GetConf() 的返回值做任何事情,golang 是否有可能垃圾收集我的配置对象并且我的 gConf 指针最终会指向任何地方?
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

如果您创建一个指向某个值的指针,取消对该指针的引用将产生该值。

这就是您必须牢记的全部内容。垃圾收集系统可能正在做它在幕后做的任何事情,但上面的说法必须仍然成立。如果垃圾收集器在您使用它们之前使您的指针无效,那将是该语言的错误实现(即编译器错误)。

当对 Go 的工作原理有疑问时,请始终查阅Go 语言规范。您会看到指针行为是明确定义的。另一方面,垃圾收集仅在介绍中提及,而没有定义任何行为。因此,我们可以假设垃圾收集不应覆盖或以其他方式干扰指针的工作方式。


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信