Go 语言利用通道实现定时或条件结束循环并执行后续代码
在 Go 语言中,可以使用通道来实现定时或者根据条件结束循环,然后执行后续代码。
例如,下面的代码使用了通道来实现每隔一段时间打印一次当前时间,并在收到停止信号后结束循环:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(1 * time.Second)
stop := make(chan bool)
go func() {
time.Sleep(5 * time.Second)
stop <- true
}()
for {
select {
case t := <-ticker.C:
fmt.Println('Tick at', t)
case <-stop:
ticker.Stop()
fmt.Println('Ticker stopped')
return
}
}
}
在这个例子中,我们使用了 time.NewTicker() 函数来创建一个定时器,每隔1秒会发送一个时间值到 ticker.C 通道中。我们还创建了一个 stop 通道,用来接收停止信号。在 main() 函数中,我们启动了一个协程,在5秒钟后向 stop 通道发送一个停止信号。然后,在 for 循环中,我们使用 select 语句来监听 ticker.C 和 stop 两个通道,如果 ticker.C 通道有值,就打印当前时间;如果 stop 通道有值,就停止定时器,打印停止信息,并退出循环。这样就可以实现每隔一段时间打印一次当前时间,并在收到停止信号后结束循环,执行后续代码。
原文地址: https://www.cveoy.top/t/topic/lrWI 著作权归作者所有。请勿转载和采集!