【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"))
	}
}
相关推荐
午夜游鱼31 分钟前
Go 并发底层 G-M-P 调度与实现
golang
moxiaoran575344 分钟前
Go 语言中的数组
golang
福大大架构师每日一题10 小时前
go-zero v1.9.3 版本更新:一致性哈希负载均衡、gRPC优化、链路追踪修复、ORM完善等重要提升
golang·负载均衡·哈希算法
源代码•宸21 小时前
100 Go Mistakes(#4 过度使用getter和setter、#5 接口污染)
开发语言·经验分享·后端·golang
捧 花1 天前
Go Web 开发流程
开发语言·后端·golang·restful·web·分层设计
南猿北者1 天前
go语言基础语法
开发语言·后端·golang
落霞的思绪1 天前
基于Go开发的矢量瓦片服务器——pg_tileserv
开发语言·后端·golang
卿雪1 天前
Redis 数据持久化:RDB和 AOF 有什么区别?
java·数据库·redis·python·mysql·缓存·golang
巴塞罗那的风1 天前
经典Agent架构实战之反思模型(Reflection)
后端·语言模型·golang
倔强菜鸟1 天前
2025.11.21-GO语言入门(一)
开发语言·后端·golang