Golang定时执行函数的实现方法

Golang定时执行函数的实现方法 能否告诉我,在 Go 语言中是否有标准方法可以定时启动函数?例如,是否可以指定一个函数每 3 秒执行一次?

6 回复

让它运行在自己的 Go 协程中

更多关于Golang定时执行函数的实现方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


是的,所有功能都正常 =) 感谢大家

谢谢,但是如何让代码在后台运行?因为编译器显示for循环后的代码永远不会执行。

另一种方法是使用 time.Tick

for range time.Tick(time.Second * 3) {
	println("ping!")
}

https://play.golang.org/p/KN6RAIjRC0H

可以使用 select

package main

import (
	"fmt"
	"time"
)

func main() {
	for {
		select {
		case <-time.After(time.Second * 3):
			fmt.Println("Hello, playground")
		}
	}
}

https://play.golang.org/p/lKpu8lcaFQq

在 Go 语言中,可以使用标准库 time 中的 Ticker 来实现定时执行函数。Ticker 会按照指定的时间间隔重复发送当前时间到通道,你可以通过循环读取该通道来触发函数执行。

以下是一个示例代码,展示如何每 3 秒执行一次函数:

package main

import (
    "fmt"
    "time"
)

func main() {
    ticker := time.NewTicker(3 * time.Second)
    defer ticker.Stop() // 确保在程序退出时停止 ticker,避免资源泄漏

    for {
        select {
        case <-ticker.C:
            // 这里放置要定时执行的函数
            fmt.Println("函数执行于:", time.Now().Format("2006-01-02 15:04:05"))
        }
    }
}

在这个例子中:

  • time.NewTicker(3 * time.Second) 创建一个每 3 秒触发一次的 ticker。
  • ticker.C 是一个通道,每 3 秒会接收到一个时间值。
  • 使用 for 循环和 select 语句持续监听 ticker 通道,当接收到值时执行函数。
  • defer ticker.Stop() 确保在函数退出时停止 ticker,释放相关资源。

如果你需要更精确的控制,比如在特定时间点执行,可以使用 time.Tick 函数(但注意它返回的通道不会关闭,可能导致资源无法回收,因此推荐使用 NewTicker)。此外,对于单次延迟执行,可以使用 time.AfterFunc

运行此代码,输出将类似:

函数执行于: 2023-10-05 14:30:03
函数执行于: 2023-10-05 14:30:06
函数执行于: 2023-10-05 14:30:09
...

这种方法简单高效,适用于大多数定时任务场景。如果涉及复杂调度,可以考虑第三方库如 github.com/robfig/cron

回到顶部