今天介紹的是在go語言里面不用time.Sleep, 使用for range 定時器管道 來實現按照我們指定的時間間隔來執行for循環, 即:?for range ticker.C { } 這樣就實現了for每隔指定時間執行一次,除非管道被關閉,否則for而且會一直柱塞當前線程,
實現測試代碼如下:
import ("bufio""fmt""os""testing""time"
)// 測試for range 定時器管道
func TestDemo(t *testing.T) {ticker := time.NewTicker(2 * time.Second) // 定時器 每隔2秒執行一次defer ticker.Stop() // 確保退出時關閉定時器buf := bufio.NewWriter(os.Stdout)//因為這里的ticker.C是一個管道, 在未關閉管道之前這個for會一直阻塞, 這里是一個定時器管道 即每隔2秒鐘這個for就會被執行一次// 如果不需要變量x,則 可以省略, 如: for range tick.C { //...for x := range ticker.C {// 向os.Stdout寫入數據buf.WriteString("\nx: " + x.Format("2006-01-02 15:04:05"))buf.Flush() // 輸出數據}panic("unreachable")
}
for語句后面可選跟的三種表達式? ??[ Condition | ForClause | RangeClause ] , 上面的例子就是第三種可選 RangeClause (范圍語句)
官方說明和語法:
A "for" statement specifies repeated execution of a block. There are three forms: The iteration may be controlled by a single condition, a "for" clause, or a "range" clause.
ForStmt = "for" [ Condition | ForClause | RangeClause ] Block . Condition = Expression .
總結:?for后面可選跟3種表達式, 第一個是條件即 boolean, 第二個可選是 一個語句, 第三個是range語句, 可以看出,在我們學習go語言的時候,要學會能夠看明白官方的這個語法很重要.....