1 回答

TA貢獻1815條經(jīng)驗 獲得超13個贊
如果我理解正確的話,你想要做的是用無限循環(huán)替換 range-over-channel 循環(huán)。即for range ticker.C { ... }-> for { ... }。
如果您希望程序而不是report函數(shù)立即完成而不等待case <-ticker.C:塊中的代碼完成,您應該在單獨的 goroutine 中執(zhí)行該代碼塊并將case <-sigC:塊從更新return nil為os.Exit(1).
func report() {
ticker := time.NewTicker(timeConfig)
defer ticker.Stop()
sigC := make(chan os.Signal, 1)
signal.Notify(sigC, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, os.Interrupt)
for {
select {
case <-ticker.C:
go func() {
connection = connectionInit()
tagValues, err := fetchLatestTags()
if err != nil {
return
}
if len(tagValues) >= threshold {
metrics, err := fetchMetrics(tagValues)
if err != nil {
return
}
if stdout {
err = locally(metrics)
if err != nil {
return
}
} else {
err = sendMail(metrics)
if err != nil {
return
}
}
}
connection.Close()
}()
case <-sigC:
os.Exit(1)
}
}
}
- 1 回答
- 0 關注
- 133 瀏覽
添加回答
舉報