Golang 通道、超时和计时器(Ticker)
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个计时器,每隔1秒钟触发一次
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop() // 确保计时器在函数退出时被停止
// 创建一个通道,用于接收超时的信号
timeout := make(chan bool, 1)
// 启动一个goroutine来监视超时情况
go func() {
time.Sleep(3 * time.Second) // 模拟一个超时的操作
timeout <- true
}()
// 使用select来监听计时器和超时事件
for {
select {
case <-ticker.C:
fmt.Println("每隔1秒钟触发一次...")
case <-timeout:
fmt.Println("操作超时了!")
return
}
}
}
这段代码首先创建了一个每隔1秒触发一次的Ticker
,然后创建了一个用于接收超时的信号的通道。在一个goroutine中,我们模拟了一个需要3秒钟才会完成的操作,并在完成后向通道发送一个信号。在主循环中,我们使用select
来监听计时器和超时事件,并根据接收到的信号来决定如何处理。如果接收到计时器的信号,它会打印一条消息;如果接收到超时的信号,它会打印超时信息并退出函数。
评论已关闭