package main import ( "fmt" "time" ) func main() { start := time.Now() tick := time.Tick(100 * time.Millisecond) boom := time.After(500 * time.Millisecond) elapsed := func() time.Duration { return time.Since(start).Round(time.Millisecond) } for { select { case <- tick: fmt.Printf("[%6s] tick.\n", elapsed()) case <- boom: fmt.Printf("[%6s] BOOM!\n", elapsed()) return default: fmt.Printf("[%6s] .\n", elapsed()) time.Sleep(50 * time.Millisecond) } } }