package main import ( "log" "time" ) func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) interval := 20 sleepTime := time.Second*5 var a []map[int]int64 // id:lasttime for i := 0; i < 15; i++ { a = append(a, map[int]int64{i:0}) } fn := func() { for id, m := range a { now := time.Now().Unix() if m[id] == 0 { m[id] = now } else { if int(now - m[id]) >= interval { log.Println(id, time.Now()) m[id] = now time.Sleep(sleepTime) } } } } tk := time.NewTicker(time.Second) go func() { for range tk.C { fn() } }() time.Sleep(sleepTime*100) }