通道、超时和计时器(Ticker)
计时器(间隔指定时间发送一次数据)
time 包中有一些有趣的功能可以和通道组合使用,其中就包含了 time.Ticker 结构体,这个对象以指定的时间间隔重复的向通道 C 发送时间值:
import "time"
chRate := time.Tick(time.Second) //每秒向通道发送一次时间数据
for i:=0; i<10; i++ {
<- chRate // 每秒阻塞一次,限制后续匿名函数协程的使用
go func(i int) {
fmt.Println("Hell", i)
}(i)
}
time.Sleep(15)
定时器(指定时间后发送一次数据)
定时器 (Timer) 结构体看上去和计时器 (Ticker) 结构体的确很像(构造为 NewTimer(d Duration)
),但是它只发送一次时间,在 Dration d
之后。
package main
import (
"fmt"
"time"
)
func main() {
tick := time.Tick(1e8) // 计时发送
boom := time.After(5e8) // 定时发送
for {
select {
case <-tick:
fmt.Println("tick.")
case <-boom:
fmt.Println("BOOM!")
return
default:
fmt.Println(" .")
time.Sleep(5e7)
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律