专业编程基础技术教程

网站首页 > 基础教程 正文

Go语言学习基础-选择、超时

ccvgpt 2024-08-08 13:04:06 基础教程 12 ℃

Select选择

Go的select语句允许同时等待多个通道操作。将协程和channels与select结合是Go的一个强大功能。

下面的示例中,将对两个通道进行选择。每个通道将在一段时间后收到一个值,以模拟在并发协程中执行的阻塞的RPC操作。我们将使用select同时等待这两个值,每次到达时都打印,结果会收到预期的one和two。请注意,总执行时间仅为~2秒,因为当前1秒和2秒各自的休眠是并发执行的。

Go语言学习基础-选择、超时

结果:

$ time go run select.go

received one

received two

real 0m2.245s

Timeout超时

对于连接到外部资源或需要限制执行时间的程序,超时非常重要。基于channels通道和select语句,在Go中实现超时既简单又优雅。

如下所示,主协程执行一个调用,该调用2s后在通道c1上返回其结果。注意,通道是缓冲的,因此协程中的数据发送是非阻塞的。这是通道的一种常见的使用模式,用于防止在永远不读取通道的情况下发生协程泄漏。

使用slect来实现超时的处理情况。语法res:=<-c1等待结果,语法<-time.Aftet设置为1s后发送一个值。由于select中第一个接收器在持续地等待,因此,当等待花费的时间超过1s,selec将采用超时的case的处理。如果把超时设置为3s,则从c2接收值将成功,并打印结果。运行此程序的结果将显示第一个操作超时和第二个操作成功。

结果:

$ go run timeouts.go

timeout 1

result 2

Tags:

最近发表
标签列表