Go select語句詳解

LiberHome發表於2022-06-03

    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

相關文章