go的timer定時器實現


示例如下:

package main
 
import (
    "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寫入值,阻塞解除,調用函數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM