Go使用全局变量要小心闭包

zenlife ·
执行main函数之前,所有的全局变量应该已经被初始化了,此时 logger为nil(因为__logger 为 nil)。即使 在main函数里,InitConf 执行后, __logger 非nil,但是 logger 仍然是nil。另外,在 http.HandleFunc 之前,调用logger.Debug() ,必然panic,因为 logger为nil。
#1
更多评论
David
Life is hard but please enjoy it!
这个问题和闭包没什么关系。 var logger = AppLog() 这句话使全局变量的初始化,会在`main`执行之前被执行,此时`InitConf`显然还没有执行,从而`__logger`必然是`nil`,通过`AppLog()`返回给了`logger`导致其为`nil`。之后`InitConf`虽然把`__logger`初始化了,但是不会改变`logger`的值。 正确的做法是把`InitConf`改名成`init`,变成 package 初始化的一部分。
#2
正解,我差点相信楼主
#3