Go 代码中实现后台周期性(每隔一段时间)执行某个任务

使用 time.Tick 方法是 time.NewTicker 的封装。

time.Tick 在到达设定时间时返回一个 Time 类型的 channel ,利用 for range 即可实现定时执行任务 :

package main

import "fmt"
import "time"

func main() {
    go heartBeat()
    time.Sleep(time.Second * 5)
}

func heartBeat() {
    for range time.Tick(time.Second * 1) {
        fmt.Println("Foo")
    }
}
摈弃世俗浮躁,追求技术精湛
Summer
讨论数量: 2

感觉,习惯直接用NewTicker了

func clock(ctx context.Context) {
    ticker := time.NewTicker(1 * time.Second)
    for {
        select {
        case <-ctx.Done():
            return
        case <-ticker.C:
            fmt.Println("1 seconds")
        }
    }
}

感觉这样更方便接收cancelFunc来关服务,防止内存泄漏

3年前 评论

初学,请教这个方法不用关闭channel么

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!