var loggers []*logOutput = nil
func init() {
loggers = make([]*logOutput, int(LOGGER_USAGE_TYPE_COUNT))
}
func ABC() {
loggers[loggerType].ticker = time.NewTicker(time.Second *
time.Duration(logRotateCheckInterval))
go func() {
defer RecoverFunc()
for {
<-loggers[loggerType].ticker.C
loggers[loggerType].checkAndRotateLogFile()
}
}()
}
<-loggers[loggerType].ticker.C
有时会感到恐慌。并且只有一个goroutine修改loggers[loggerType]
和loggers[loggerType].ticker
。
我发现当恐慌发生时,loggers[loggerType].ticker
为nil
,这让我觉得goroutine在执行loggers[loggerType].ticker
之前使用loggers[loggerType].ticker = time.NewTicker(time.Second *
time.Duration(logRotateCheckInterval))
的值。
有人能解释何时闭包取外部变量的值? 我将记录器作为指针变量更改为goroutine func作为解决方案