亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

垃圾收集是否會在使用前將指針釋放到包級變量中?

垃圾收集是否會在使用前將指針釋放到包級變量中?

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 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號