【go】延迟执行和定时器实现

目录

time.Sleep

time.After

time.NewTimer

time.NewTicker


time.Sleep

time.Sleep可以实现延时执行

Go 复制代码
func TestSleep(t *testing.T) {
	fmt.Println("start time:", time.Now().Format("2006-01-02 15:04:05.000"))

	time.Sleep(2 * time.Second)

	fmt.Println("end   time:", time.Now().Format("2006-01-02 15:04:05.000"))
}

time.After

time.After也可以实现延迟执行。返回一个只读的time.Time类型的channel,读取到的是延迟后的当前时间

Go 复制代码
func TestAfter(t *testing.T) {
	fmt.Println("start time:", time.Now().Format("2006-01-02 15:04:05.000"))

	var timer <-chan time.Time = time.After(2 * time.Second)
	now := <-timer

	fmt.Println("end   time:", now.Format("2006-01-02 15:04:05.000"))
}

time.NewTimer

time.NewTimer可以实现延迟执行,并且还提供了重置延迟时间的接口实现定时器。timer.C返回的是一个只读的time.Time类型的channel,读取到的是延迟后的当前时间

Go 复制代码
func TestTimer(t *testing.T) {
	fmt.Println("start time:", time.Now().Format("2006-01-02 15:04:05.000"))

	var timer *time.Timer = time.NewTimer(2 * time.Second)

	for now := range timer.C {
		timer.Reset(3 * time.Second)
		fmt.Println("now   time:", now.Format("2006-01-02 15:04:05.000"))
	}
}

time.NewTicker

time.NewTicker直接实现了定时器。

Go 复制代码
func TestTicker(t *testing.T) {
	fmt.Println("start time:", time.Now().Format("2006-01-02 15:04:05.000"))

	ticker := time.NewTicker(2 * time.Second)

	for now := range ticker.C {
		fmt.Println("now   time:", now.Format("2006-01-02 15:04:05.000"))
	}
}
相关推荐
利威尔xu2 天前
Go map 底层崩溃:3 个 goroutine 并发写同一张 map,fatal error 崩掉整个服务
golang·源码·map·并发·后端开发
利威尔xu3 天前
2026-11-08-Go-defer-panic-recover面试
面试·golang
JWASX4 天前
【Go】map 源码解析 - group
后端·golang·map·源码分析
联犀5 天前
纯 Go 的 CAD 开源库 go-cad:直接解析 DWG/DXF,现在也能导出 PDF
开发语言·golang·pdf
FungLeo5 天前
成为全栈·Go 后端篇·三轮代码审阅之后:把可读性和证据做成工程规则
golang·go·ast·静态检查·成为全栈·代码审阅
联犀5 天前
联犀 Go SIMD 实战:视频转码从 16.5ms 到 5.46ms
开发语言·golang·音视频
紧跟先前的步伐6 天前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
利威尔xu6 天前
2026-11-05-Go内存管理面试
面试·golang
Zenova EdgeOS7 天前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
JavaPub-rodert8 天前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang