Go select语句详解

    select是Go提供的一个选择语句,通过select可以监听chanel上的数据流动。
    select语句的使用方法和switch语句相似,由select开始一个新的选择块,每一个选择块,每一个选择条件由case语句来实现。
    和switch语句不同的地方在于,select的case条件都是chanel的通信操作, select语句根据不同的case有可能被阻塞,也可能被执行。

举个例子:

package main

import (
    "fmt"
    "time"
)

func main() {
    ch1 := make(chan int)
    ch2 := make(chan int)

    go func() {
        time.Sleep(3 * time.Second)
        ch1 <- 100
    }()
    go func() {
        time.Sleep(3 * time.Second)
        ch2 <- 100
    }()

    select {
    case num1 := <-ch1:
        fmt.Println("ch1中获取的数据: ", num1)
    case num2, ok := <-ch2:
        if ok {
            fmt.Println("ch2中读取的数据: ", num2)
        } else {
            fmt.Println("ch2 已关闭")
        }
    //default:
    //     fmt.Println("default语句可选 可有可无")
    }
    fmt.Println("main goroutine has been completed")
}

这里由于ch1和ch2都写入了数据,select会随机选择一个case执行,有default语句就执行default语句,都没有的话就阻塞直到有满足条件的case出现。

参考:bilibili

你可能感兴趣的:(golang并发编程)