golang 不用sleep如何实现实现每隔指定时间执行一次for循环?

今天介绍的是在go语言里面不用time.Sleep, 使用for range 定时器管道 来实现按照我们指定的时间间隔来执行for循环, 即: for range ticker.C { } 这样就实现了for每隔指定时间执行一次,除非管道被关闭,否则for而且会一直柱塞当前线程,

实现测试代码如下:

Go 复制代码
import (
	"bufio"
	"fmt"
	"os"
	"testing"
	"time"
)

// 测试for range 定时器管道 
func TestDemo(t *testing.T) {
	ticker := time.NewTicker(2 * time.Second) // 定时器 每隔2秒执行一次
	defer ticker.Stop()                       // 确保退出时关闭定时器

	buf := bufio.NewWriter(os.Stdout)
	//因为这里的ticker.C是一个管道, 在未关闭管道之前这个for会一直阻塞, 这里是一个定时器管道 即每隔2秒钟这个for就会被执行一次
	// 如果不需要变量x,则 可以省略, 如: for range tick.C { //...
	for x := range ticker.C {
		// 向os.Stdout写入数据
		buf.WriteString("\nx: " + x.Format("2006-01-02 15:04:05"))
		buf.Flush() // 输出数据
	}

	panic("unreachable")
}

for语句后面可选跟的三种表达式 [Condition](https://go.dev/ref/spec#Condition "Condition") \| [ForClause](https://go.dev/ref/spec#ForClause "ForClause") \| [RangeClause](https://go.dev/ref/spec#RangeClause "RangeClause") , 上面的例子就是第三种可选 RangeClause (范围语句)

官方说明和语法:

A "for" statement specifies repeated execution of a block. There are three forms: The iteration may be controlled by a single condition, a "for" clause, or a "range" clause.

复制代码
ForStmt = "for" [ https://go.dev/ref/spec#Condition | https://go.dev/ref/spec#ForClause | https://go.dev/ref/spec#RangeClause ] https://go.dev/ref/spec#Block .
Condition = https://go.dev/ref/spec#Expression .

总结: for后面可选跟3种表达式, 第一个是条件即 boolean, 第二个可选是 一个语句, 第三个是range语句, 可以看出,在我们学习go语言的时候,要学会能够看明白官方的这个语法很重要.....

相关推荐
2401_8685347812 分钟前
局域网络中信息安全方案设计及攻击防范技术(制造企业园区网)
服务器·网络
javaDocker1 小时前
1800 亿科技投入砸下去,多数机构平的只是服务器,不是能力
运维·服务器·人工智能·科技·研发效能·金融科技
服务器硬件项目经理1 小时前
超节点修仙录 目 录
服务器·硬件工程·硬件
0+1112 小时前
Linux --DNS与ICMP
linux·运维·服务器
我命由我123452 小时前
5-1.Python 编码进阶 - 函数进阶(参数、返回值、递归、函数作为参数传递、lambda 匿名函数)
java·服务器·数据库·后端·python·java-ee·python3.11
服务器硬件项目经理3 小时前
全系列目录导航
服务器·gru·硬件
库玛西4 小时前
计算机网络第三章:数据链路层
服务器·网络·计算机网络·考研·算法·面试
竣达技术4 小时前
Modbus 转 SNMP 协议转换器|自定义协议 + SNMP TRAP 主动上报
运维·服务器·网络·数据库·安全
服务器硬件项目经理4 小时前
第2章GPU的身份证:一张显卡上都有啥
服务器·gru·硬件工程·硬件
服务器硬件项目经理4 小时前
《超节点修仙录》· 第一卷·炼气期【第01话】 什么是超节点?——从「一台电脑不够用」说起
服务器·嵌入式硬件·gpu算力·硬件