我有一个全局变量,它读取我在不同函数中使用的配置文件。当我执行 main 方法,并尝试从配置中读取一个值时,该值还没有准备好,所以我得到一个奇怪的值 :ᾐ
应该是 8080。什么是正确的等待全局变量准备就绪的方法。
var conf = getGeneralConfig()
func main() {
router := mux.NewRouter()
fmt.Println(":" + string(conf.PORT))
router.HandleFunc("/add", add).Methods("POST")
// conf is not yet ready here
log.Fatal(http.ListenAndServe(":"+string(conf.PORT), router))
}
提前致谢。
最佳答案
Global variable initializers and package init()
functions will always run before main()
。如果您的 getGeneralConfig
函数启动一个 goroutine,但您需要它在 main()
运行之前完成,要么 a) 不要使用 goroutine,要么 b) 使用 sync.WaitGroup
以确保它在 getGeneralConfig
返回之前完成。
关于go - 正确等待全局变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50492794/