package main import ( "flag" "log" "sync" "time" ) var ( conf = flag.String("conf", "config.yml", "configuration file") intr = flag.Duration("interval", time.Second*5, "check interval") ) func Checker(uri string, intr time.Duration, errc chan<- error) { t := time.NewTicker(intr) var n int defer t.Stop() key := Keys() for range t.C { err := Check(uri, <-key) if err != nil { n++ errc <- err } if n > 5 { log.Println("give up", uri) return } } } func main() { flag.Parse() c, err := LoadConfig(*conf) if err != nil { log.Fatal(err) } errc := Logger() wg := sync.WaitGroup{} for _, uri := range c.Check { wg.Add(1) go func(uri string) { Checker(uri, *intr, errc) wg.Done() }(uri) } wg.Wait() }