Simple

ticker := time.NewTicker(5 * time.Second)
for range ticker.C {
	log.Println("Hey!")
}

With timeout

ticker := time.NewTicker(5 * time.Second)
defer ticker.Stop()
 
timeout := time.NewTimer(300 * time.Second)
defer timeout.Stop()
 
for {
	select {
	case <-timeout.C:
		return errors.New("timeout")
	case <-ticker.C:
		// do
	}
}