package warning import ( "sync" "github.com/sagernet/sing-box/log" ) type Warning struct { logger log.Logger check CheckFunc message string checkOnce sync.Once } type CheckFunc = func() bool func New(checkFunc CheckFunc, message string) Warning { return Warning{ check: checkFunc, message: message, } } func (w *Warning) Check() { w.checkOnce.Do(func() { if w.check() { log.Warn(w.message) } }) }