我有这个功能,这样里面的方法就可以自动运行了。我的问题是第二种情况sigC仅在 case ticker.C 完成后才有效,这并不理想,因为程序运行时带有标志,因此如果我想更改标志并改变程序的行为,我必须等待代码方法完成运行,这可能需要一些时间。
我的目标是当我按下 Ctrl+C 时,程序会立即完成运行。
func report() error {
ticker := time.NewTicker(timeConfig)
sigC := make(chan os.Signal, 1)
signal.Notify(sigC, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, os.Interrupt)
for range ticker.C {
select {
case <-ticker.C:
connection = connectionInit()
tagValues, err := fetchLatestTags()
if err != nil {
return err
}
if len(tagValues) >= threshold {
metrics, err := fetchMetrics(tagValues)
if err != nil {
return err
}
if stdout {
err = locally(metrics)
if err != nil {
return err
}
} else {
err = sendMail(metrics)
if err != nil {
return err
}
}
}
connection.Close()
case <-sigC:
return nil
}
}
return nil
}
萧十郎