Golang select 语句

2021-11-21  本文已影响0人  BitInterfc

select 是 Go 中的一个控制结构,类似于用于通信的 switch 语句。每个 case 必须是一个通信操作,要么是发送要么是接收。

select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。

Select 的语法如下:

select {
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s);
    /* 你可以定义任意数量的 case */
    default : /* 可选 */
       statement(s);
}

Select 和Channel 协同使用:

它用于等待一个或者多个channel的输出。

应用场景: 主goroutine等待子goroutine完成,但是子goroutine无限运行,导致主goroutine会一直等待下去。而主线程想假如超过了一定的时没有返回的话,进行超时判断然后继续运行下去。

package main

import (
    "time"
    "fmt"
)

var chs chan int = make(chan int,1)

func write(){
    time.Sleep(3 * time.Second)
    chs<-1
}

func read(){
    select {
    case ch1:=<-chs:
        fmt.Println(ch1)
        return
    case <-time.After(2 * time.Second):
        fmt.Println("read time out")
        return
    }
}

func main() {
    go write()
    read()
}

在文本的用例中,write() 在三秒后才会向通道发送信号,而read() tiamout只有两秒,程序的运行结果就是打印time out:


image.png
上一篇 下一篇

猜你喜欢

热点阅读