Go 语言使用 time.Tick() 函数来实现固定时间重复执行(定期循环)

yufei       3 年, 8 月 前       8150

如果你从其它语言而来,要实现固定时间重复执行,第一个想到的代码可能是

for {
    time.Sleep(2 * time.Second)  // 2 秒间隔
  do_some_thing()
}

但是,更优雅的方案其实是

for range time.Tick(2 * time.Second ) {
  do_some_thing()
}

time.Tick() 函数返回的是一个 channel ,每隔指定的时间就会有数据从 channel 中出来。

range 其实是可以不接收遍历的值的,如果不接收,就可以简写成上面的格式。

那为什么我们不推荐 time.Sleep() 的方式呢,毕竟从上面的例子上看,感觉也没差多少啊?

但是,如果我们要指定退出机制,用 time.Sleep() 可能的做法就是

stop := false

go func(){
  for {
    if !stop {
      break;
    }
    do_some_thing()
    time.Sleep(2 * time.Second)  // 2 秒间隔
  }
}()

do_some_other_thing()
stop = false

而用 time.Tick() 的做法则是

t: = time.NewTicker(time.Second * 2)

go func(){
  for {
    select {
      case <- t.C:
      do_some_thing()
     }
  }
}()

do_some_other_thing()
t.Stop()

从逻辑和语义上来将 time.NewTicker() 的方式显然更 go

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.