Go语言实现定时器的方法
本文介绍在Go语言中如何实现基础定时器。核心使用time.NewTicker创建定时器对象,配合无限循环和select语句监听通道信号来触发周期性任务。同时展示通过Goroutine异步执行多个不同周期的定时器,确保主程序不阻塞等待。
结果或目标
在Go程序中实现一个能够定期执行特定任务的机制。本示例将演示每1秒和每2秒分别打印不同的日志信息,且两个定时任务互不干扰、同步运行。
准备条件
- 安装并配置好Go开发环境。
- 创建一个新的Go源文件(例如main.go)。
真实操作顺序
第1步:引入必要的标准库包
为了处理时间间隔和输出信息,需要导入fmt和time两个包。
package main
import (
"fmt"
"time"
)
第2步:定义需要定时执行的业务逻辑函数
为了区分不同的定时任务,分别定义两个简单的打印函数testTimer1和testTimer2。在实际应用中,这里可以替换为真实的业务处理代码。
func testTimer1() {
fmt.Println("test timer1")
}
func testTimer2() {
fmt.Println("test timer2")
}
第3步:编写第一个定时器逻辑(每秒触发)
使用time.NewTicker(1 * time.Second)创建一个周期为1秒的定时器。该函数返回一个*Ticker对象,其C字段是一个通道。
在无限循环中,使用select语句监听该通道的数据到达事件。当收到信号时,调用相应的业务函数。
func timer1() {
timer1 := time.NewTicker(1 * time.Second)
for {
select {
case <-timer1.C:
testTimer1()
}
}
}
第4步:编写第二个定时器逻辑(每两秒触发)
同理,创建另一个周期为2秒的定时器,并在循环中监听其通道信号,执行testTimer2函数。
func timer2() {
timer2 := time.NewTicker(2 * time.Second)
for {
select {
case <-timer2.C:
testTimer2()
}
}
}
第5步:在main函数中启动定时器
为了实现并发执行,需要在main函数中将这两个定时器任务放入独立的Goroutine中运行:
go timer1():以协程方式启动,立即返回,不阻塞后续代码。timer2():由于timer1已经由协程运行,当前行会执行timer2;而timer2内部包含无限循环,因此它会永久运行,从而保证整个进程不会退出。
func main() {
go timer1()
timer2()
}
完成判断
运行上述代码后,控制台将持续输出交替的日志:test timer1(每秒出现一次)和test timer2(每两秒出现一次)。若需停止程序,需手动中断进程(如Ctrl+C),因为timer2的无限循环导致主线程无法自然结束。
简要总结
以上就是Go语言实现基础定时器的详细内容,更多关于Go语言定时调度机制的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













