028_go语言中的超时处理
代码演示
package main
import "fmt"
import "time"
func main() {
c1 := make(chan string, 1)
go func() {
time.Sleep(time.Second * 2)
c1 <- "result 1"
}()
select {
case res := <-c1:
fmt.Println(res)
case <-time.After(time.Second * 1):
fmt.Println("timeout 1")
}
c2 := make(chan string, 1)
go func() {
time.Sleep(time.Second * 2)
c2 <- "result 2"
}()
select {
case res := <-c2:
fmt.Println(res)
case <-time.After(time.Second * 3):
fmt.Println("timeout 2")
}
}
代码运行结果
timeout 1 result 2
代码解读
- 以上是超时的两个小例子,go语言中可以用select优雅简洁的控制超时
- 第一个go func,我们用来假象程序执行了一个外部调用,并且两秒钟以后才能返回结果
- 紧接着,我们用select和case语句控制超时,第一条case语句开始没有执行,因为处于阻塞状态,第二条语句超时时间设置为了1秒,所以会被执行
- 第二个go func同理,但是第case语句的超时时间设置为了3秒,所以还没有超时的情况下,第一条case语句会拿到结果,进而被执行

浙公网安备 33010602011771号