func loopFeed(feed *rss.Feed, url string, chatid int) { go func() { interval := 7 stopRssLoop[strconv.Itoa(chatid)+":"+url] = make(chan bool) firstLoop := true t := time.Tick(time.Minute*time.Duration(interval-1) + time.Second*time.Duration(rand.Intn(120))) Loop: for { select { case <-stopRssLoop[strconv.Itoa(chatid)+":"+url]: break Loop case <-t: if firstLoop { time.Sleep(time.Duration(rand.Intn(interval)) * time.Minute) firstLoop = false } if err := feed.Fetch(url, charsetReader); err != nil { loge.Warningf("failed to fetch rss, "+ "retry in 3 seconds... [ %s ]", url) time.Sleep(time.Second * 3) continue } } } }() }