何时使用golang中的聚类之外的值?

时间:2017-07-28 07:02:31

标签: go closures

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].tickernil,这让我觉得goroutine在执行loggers[loggerType].ticker之前使用loggers[loggerType].ticker = time.NewTicker(time.Second * time.Duration(logRotateCheckInterval))的值。

有人能解释何时闭包取外部变量的值? 我将记录器作为指针变量更改为goroutine func作为解决方案

0 个答案:

没有答案