本文主要是介绍golang 不用sleep如何实现实现每隔指定时间执行一次for循环?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天介绍的是在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语言的时候,要学会能够看明白官方的这个语法很重要.....
这篇关于golang 不用sleep如何实现实现每隔指定时间执行一次for循环?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!