go NewTicker 得使用
转载请注明出处:
在 Go 语言中,time.NewTicker 函数用于创建一个周期性触发的定时器。它会返回一个 time.Ticker 类型的值,该值包含一个通道 C,定时器会每隔一段时间向通道 C 发送一个时间值。 NewTicker 函数的签名如下:
func NewTicker(d Duration) *Ticker
其中,d 是一个表示时间间隔的 time.Duration 类型的值。 使用 NewTicker 的一般步骤如下:
调用
NewTicker函数创建一个定时器对象。使用
Ticker.C通道进行循环读取,每次读取都会阻塞直到定时器触发。在定时器触发后执行相应的操作。
下面是一个简单的示例代码,演示了如何使用 NewTicker:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(1 * time.Second) // 创建一个每秒触发一次的定时器
defer ticker.Stop() // 在结束时停止定时器
done := make(chan bool) // 创建一个通道用于结束循环
go func() {
time.Sleep(5 * time.Second) // 等待5秒后结束循环
done <- true
}()
for {
select {
case <-done:
fmt.Println("循环结束")
return
case t := <-ticker.C:
fmt.Println("定时器触发:", t)
// 在这里执行定时器触发后的操作
}
}
}
在上述代码中,创建了一个每秒触发一次的定时器 ticker。然后使用一个 done 通道来控制循环的结束,在另一个 goroutine 中等待 5 秒后向 done 通道发送数据。在主 goroutine 的循环中,使用 select 语句监听 done通道和 ticker.C通道,如果 done 通道接收到数据,则循环结束;如果 ticker.C 通道接收到数据,则定时器触发,执行相应的操作。
运行上述代码,每秒钟会打印一次 "定时器触发" 信息,连续打印 5 秒后,程序输出 "循环结束" 并结束循环。这个示例展示了如何使用 NewTicker 创建一个周期性触发的定时器,并在定时器触发后执行相应的操作。
也可以通过 for 循环遍历ticker 通道进行任务执行,代码示例如下:
package main import (
"fmt"
"time"
) func main() {
ticker := time.NewTicker(1 * time.Second) // 创建一个间隔为1秒的定时器
defer ticker.Stop() // 在不再需要时停止定时器 go func() {
for range ticker.C {
fmt.Println("Tick at", time.Now())
}
}() time.Sleep(5 * time.Second) // 睡眠5秒,模拟其他工作
}
go NewTicker 得使用的更多相关文章
- golang的定时器NewTimer、NewTicker使用
package main import ( "fmt" "sync" "time" ) /** *ticker只要定义完成,从此刻开始计时, ...
- GO 定时器NewTimer、NewTicker使用
package main import ( "fmt" "sync" "time" ) /** *ticker只要定义完成,从此刻开始计时, ...
- golang开发缓存组件
代码地址github:cache 花了一天时间看了下实验楼的cache组件,使用golang编写的,收获还是蛮多的,缓存组件的设计其实挺简单的,主要思路或者设计点如下: 全局struct对象:用来做缓 ...
- go 的 time ticker 设置定时器
上示例 package main import ( // "bytes" // "encoding/json" "fmt" // " ...
- Go并发编程实践
前言 并发编程一直是Golang区别与其他语言的很大优势,也是实际工作场景中经常遇到的.近日笔者在组内分享了我们常见的并发场景,及代码示例,以期望大家能在遇到相同场景下,能快速的想到解决方案,或者是拿 ...
- Go语言学习笔记(七)杀手锏 Goroutine + Channel
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 Goroutine Go语言的主要的功能在于令人简易使用的并行设计,这个方法叫做Goroutine,通过Gorou ...
- GO 语言简介(网摘)
GO 语言简介 原文出处:[陈皓 coolshell] Hello World 文件名 HELLO.GO package main //声明本文件的package名 import "fmt& ...
- 百行go代码构建p2p聊天室
百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...
- tcp并发服务器(c20w)
** 原创文章,请勿转载 ** 并发服务器是一个老生常谈的话题,今天这里也写一个. 1. 目标: 同时在线连接20万(c20w). 开发语言:重要的事情说三遍,GOLANG, GOLANG, GOLA ...
- Go基础--goroutine和channel
goroutine 在go语言中,每一个并发的执行单元叫做一个goroutine 这里说到并发,所以先解释一下并发和并行的概念: 并发:逻辑上具备同时处理多个任务的能力 并行:物理上在同一时刻执行多个 ...
随机推荐
- SSM整合的所有配置(配置类)
导入依赖坐标pom.xml <dependencies> <dependency> <groupId>junit</groupId> <artif ...
- 【Note】矩阵加速
感谢 \(\text{tidongCrazy}\) 倾情授课. 目录 基本形式 基础习题 P1962 斐波那契数列(例题) P4838 P哥破解密码(矩阵加速) 稍微up P1397 [NOI2013 ...
- kettle从入门到精通 第十一课 kettle javascript 解析json数组
1.json步骤虽然可以解析json数组,但是不够灵活.通过javascript步骤来解析json数组比较灵活,且可以按照需要组装数据流转到下个步骤. 1)步骤名称:可以自定义 2)Transform ...
- IIC总线协议—读写EEPROM
IIC总线协议-读写EEPROM 1.I2C简介 I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USA ...
- .NET快速开发框架-RDIFramework.NET 全新EasyUI版发布
RDIFramework.NET,基于.NET的快速信息化系统快速开发框架.10年专注.易上手.多组件.全源码.可灵活构建各类型系统. 1.RDIFramework.NET快速开发框架简介 RDIFr ...
- 10分钟理解React生命周期
前言 学习React,生命周期很重要,我们了解完生命周期的各个组件,对写高性能组件会有很大的帮助. 一.简介 React /riˈækt/ 组件的生命周期指的是组件从创建到销毁过程中所经历的一系列方法 ...
- PYTHON数据分析——python基础
利用命令行创建python文件 C:\Users\Your Name>python myfile.py Python 变量命名规则: 变量名必须以字母或下划线字符开头 变量名称不能以数字开头 变 ...
- javasec(二)class文件结构
这篇文章介绍java的class文件结构. 深入理解Java虚拟机(类文件结构) 我们所编写的每一行代码,要在机器上运行最终都需要编译成二进制的机器码 CPU 才能识别.但是由于虚拟机的存在,屏蔽了操 ...
- 【故障公告】被放出的 Bing 爬虫,又被爬宕机的园子
这些巨头爬虫们现在怎么了?记忆中2022年之前的十几年,园子没有遇到过被巨头爬虫们爬宕机的情况,巨头们都懂得爱护,都懂得控制节奏,都懂得在爬网时控制并发连接数以免给目标网站造成过大压力. 从去年开始, ...
- vue2中使用composition-api
vue2中使用composition-api https://juejin.cn/post/6874927606820274184 vue3.0 watch 函数 https://www.jiansh ...