【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"))
	}
}
相关推荐
赴前尘9 小时前
Go 微服务框架排行榜(按 GitHub Star 排序)
微服务·golang·github
自学AI的鲨鱼儿19 小时前
ubuntu22.04安装gvm管理go
开发语言·后端·golang
数据知道20 小时前
Go基础:正则表达式 regexp 库详解
开发语言·mysql·golang·正则表达式·go语言
Paul_09201 天前
golang面经——内存相关模块
服务器·网络·golang
gopyer1 天前
180课时吃透Go语言游戏后端开发6:Go语言的循环语句
开发语言·游戏·golang·循环语句
sitellla2 天前
Testify Go测试工具包入门教程
git·测试工具·其他·golang
gopher95112 天前
Go 语言的 panic 和 recover
开发语言·golang
xqlily2 天前
Go语言:高效简洁的现代编程语言
开发语言·后端·golang
数据知道2 天前
Go语言:数据压缩与解压详解
服务器·开发语言·网络·后端·golang·go语言