【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"))
	}
}
相关推荐
牛奔12 小时前
Go语言中结构体转Map优雅实现
开发语言·后端·macos·golang·xcode
雨中散步撒哈拉16 小时前
22、做中学 | 高一下期 | Golang反射
开发语言·golang·状态模式
DICOM医学影像17 小时前
8. go语言从零实现以太坊响应端 - 查询区块链账户余额
golang·区块链·以太坊·web3.0·响应端·从零实现
Mr -老鬼18 小时前
Java、Go、Rust高并发时代“称雄”之战:场景适配与生态博弈
java·golang·rust
源代码•宸19 小时前
Golang原理剖析(map)
经验分享·后端·算法·golang·哈希算法·散列表·map
老蒋每日coding20 小时前
驾驭并发之力:Go语言构建高可用微服务完全指南
开发语言·微服务·golang
weixin1997010801621 小时前
安家 GO item_get - 获取安家详情数据接口对接全攻略:从入门到精通
java·大数据·python·golang
Logan Lie21 小时前
Go语言接口(interface)深度详解
开发语言·数据库·golang
林书笑忘书21 小时前
Go面试八股
java·面试·golang
molaifeng1 天前
Go 语言如何实现高性能网络 I/O:Netpoller 模型揭秘
开发语言·网络·golang