当前位置: 首页 > article >正文

【go从零单排】Ticker

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

在 Go 语言中,Ticker 是一个用于定期执行某些操作的工具。它属于 time 包,提供了一种简单的方法来处理定时任务,适用于需要周期性执行的场景。

💻代码

package main

import (
	"fmt"
	"time"
)

func main() {
	// 创建一个 Ticker,每秒触发一次
	ticker := time.NewTicker(1 * time.Second)
	defer ticker.Stop() // 用 defer 确保在 main 函数结束时停止它。

	// 启动一个 goroutine 来处理 Ticker
	go func() {
		//使用 for 循环从 ticker.C 接收时间信号,并打印每次触发的时间。
		for t := range ticker.C {
			fmt.Println("Tick at", t)
		}
	}()

	// 模拟一些工作
	time.Sleep(5 * time.Second)
	fmt.Println("Stopping the ticker...")

	// 停止 Ticker,将停止发送信号到通道 C。
	ticker.Stop()
}
//输出
//Tick at 2024-11-11 14:28:42.510614942 +0800 CST m=+1.000234620
//Tick at 2024-11-11 14:28:43.510633219 +0800 CST m=+2.000234257
//Tick at 2024-11-11 14:28:44.51065133 +0800 CST m=+3.000234105
//Tick at 2024-11-11 14:28:45.510671323 +0800 CST m=+4.000234743
//Stopping the ticker...

🔍理解

  • Timer函数一般用于一次定时任务,Ticker函数用于周期性的定时任务
  • Ticker 适用于需要定期执行的任务,例如定时检查状态、定期发送心跳等。
  • 使用 goroutine 处理 Ticker 的触发,使得主程序可以继续执行其他操作。
  • 使用 Stop() 方法可以安全地停止 Ticker,避免在不再需要时继续占用资源
  • 使用 time.NewTicker 函数创建一个新的 Ticker。该函数接受一个 time.Duration 类型的参数,表示每次触发的间隔时间。

💡 Tips小知识点

经典场景

package main

import (
	"fmt"
	"time"
)

func main() {
	// 创建一个 Ticker,每 500 毫秒触发一次
	ticker := time.NewTicker(500 * time.Millisecond)
	done := make(chan bool) // 创建一个用于通知停止的通道

	// 启动一个 goroutine 来处理 Ticker
	go func() {
		for {
			select {
			case <-done: // 如果接收到停止信号,退出循环
				return
			case t := <-ticker.C: // 从 Ticker 的通道接收时间信号
				fmt.Println("Tick at", t) // 打印当前时间
			}
		}
	}()

	// 主 goroutine 暂停 1600 毫秒
	time.Sleep(1600 * time.Millisecond)
	ticker.Stop()                 // 停止 Ticker
	done <- true                  // done <- true // 发送信号,通知 goroutine 停止
	fmt.Println("Ticker stopped") // 打印停止消息
}

//输出
//Tick at 2024-11-11 14:32:10.746581931 +0800 CST m=+0.500304237
//Tick at 2024-11-11 14:32:11.246590386 +0800 CST m=+1.000303450
//Tick at 2024-11-11 14:32:11.746599522 +0800 CST m=+1.500303668
//Ticker stopped
  • done <- true 和 done <- false 都是向通道发送信号的操作。
  • true 通常表示停止或完成,而 false 可以表示继续或保持状态。
  • 使用 done 通道来安全地停止 goroutine,避免直接使用 os.Exit 或其他强制退出的方法。

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述


http://www.kler.cn/a/394588.html

相关文章:

  • react + ts定义接口类型写法
  • idea 弹窗 delete remote branch origin/develop-deploy
  • 百度搜索AI探索版多线程批量生成TXT原创文章软件-可生成3种类型文章
  • docker更改数据目录
  • 量化交易系统开发-实时行情自动化交易-3.4.2.2.Okex交易数据
  • Android Studio 将项目打包成apk文件
  • Python自动化操作JSON文件详解
  • 在Ubuntu 24.04 LTS上安装飞桨PaddleX
  • uniapp隐藏自带的tabBar
  • 【刷题19】队列+bfs专题
  • 生成自签名证书并配置 HTTPS 使用自签名证书
  • uni-app快速入门(四)--maninfest.json及pages.json配置
  • CSS新特性
  • Ai编程从零开始全栈开发一个后台管理系统之用户登录、权限控制、用户管理-前端部分(十二)
  • nacos配置中心入门
  • 【达梦数据库】参数优化脚本主要改什么
  • spark.default.parallelism 在什么时候起作用,与spark.sql.shuffle.partitions有什么异同点?
  • LaTeX中浮动体(图片、表格)的位置及上下间距设置
  • 使用命令强制给ESXI上的硬盘分区
  • Grafana Username password invalid
  • JavaScript的展开运算符在React中的应用
  • 游戏引擎学习第11天
  • 软件测试计划和测试用例详解
  • 鸿蒙学习生态应用开发能力全景图-鸿蒙生态伙伴 SDK 市场(4)
  • 家政服务平台管理系统(源码+文档+部署+讲解)
  • Sql进阶:字段中包含CSV,如何通过Sql解析CSV成多行多列?