示例如下:
package mainimport ("fmt""time"
)func testTimer1() {go func() {fmt.Println("test timer1")}()}func testTimer2() {go func() {fmt.Println(time.Now().String())}()
}func timer1() {timer1 := time.NewTicker(1 * time.Second)for {select {case <-timer1.C:testTimer1()}}
}func timer2() {timer2 := time.NewTicker(5 * time.Second)for {select {case <-timer2.C:testTimer2()}}
}func main() {go  timer1()timer2()
}
 运行结果截屏如下:
 
  
看go的time部分源码 Ticker结构
type Ticker struct {C <-chan Time // The channel on which the ticks are delivered.r runtimeTimer}
 
go的time和ticket的调用
或者叫timmer internal和其他语言的开发思路不一样。
其他语言,多是注册回调函数,定时,时间到了调用回调。
go是 通过 chan
的阻塞实现的。
调用的地方,读取chan
定时,时间到,向chan写入值,阻塞解除,调用函数