go - 正确等待全局变量初始化

标签 go

我有一个全局变量,它读取我在不同函数中使用的配置文件。当我执行 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/

相关文章:

在 CGO 中使用 C 结构的 golang 结构

http - GOLANG,HTTP 有 "use of closed network connection"错误

struct - 如何定义嵌入/匿名字段(go struct )

go - 带有 nil 的指针函数接收器是否安全?

go - 类型转换运算符重载为 'GO' 中的全局函数

go - 从 Go 中的字符串中提取匹配模式

pointers - 无法从指针接收器访问值

concurrency - Golang 并发数组访问

pointers - 指向指针的指针有什么用?

data-structures - 链表实现的指针问题