溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

go語(yǔ)言中select的基本用法

發(fā)布時(shí)間:2020-06-17 10:12:28 來(lái)源:億速云 閱讀:242 作者:Leah 欄目:編程語(yǔ)言

今天小編給大家分享的是go語(yǔ)言中select的基本用法,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說(shuō),一起往下看吧。

select是go語(yǔ)言中常用的一個(gè)關(guān)鍵字,是用來(lái)監(jiān)聽(tīng)和channel有關(guān)的IO操作,當(dāng) IO 操作發(fā)生時(shí),觸發(fā)相應(yīng)的動(dòng)作。

如果有多個(gè)case都可以運(yùn)行,Select會(huì)隨機(jī)公平地選出一個(gè)執(zhí)行。其他不會(huì)執(zhí)行。 

否則:

如果有default子句,則執(zhí)行該語(yǔ)句。

如果沒(méi)有default字句,select將阻塞,直到某個(gè)通信可以運(yùn)行;Go不會(huì)重新對(duì)channel或值進(jìn)行求值。

基本用法

//select基本用法
select {
case <- chan1:
// 如果chan1成功讀到數(shù)據(jù),則進(jìn)行該case處理語(yǔ)句
case chan2 <- 1:
// 如果成功向chan2寫(xiě)入數(shù)據(jù),則進(jìn)行該case處理語(yǔ)句
default:
// 如果上面都沒(méi)有成功,則進(jìn)入default處理流程

如果有一個(gè)或多個(gè)IO操作可以完成,則Go運(yùn)行時(shí)系統(tǒng)會(huì)隨機(jī)的選擇一個(gè)執(zhí)行,否則的話,如果有default分支,則執(zhí)行default分支語(yǔ)句,如果連default都沒(méi)有,則select語(yǔ)句會(huì)一直阻塞,直到至少有一個(gè)IO操作可以進(jìn)行

start := time.Now()
    c := make(chan interface{})
    ch2 := make(chan int)
        ch3 := make(chan int)

    go func() {

        time.Sleep(4*time.Second)
        close(c)
    }()

    go func() {

        time.Sleep(3*time.Second)
        ch2 <- 3
    }()

      go func() {

        time.Sleep(3*time.Second)
        ch3 <- 5
    }()

    fmt.Println("Blocking on read...")
    select {
    case <- c:

        fmt.Printf("Unblocked %v later.\n", time.Since(start))

    case <- ch2:

        fmt.Printf("ch2 case...")
      case <- ch3:

        fmt.Printf("ch2 case...")
    default:

        fmt.Printf("default go...")
    }

運(yùn)行上述代碼,由于當(dāng)前時(shí)間還未到3s。所以,目前程序會(huì)走default。

上文描述的就是go語(yǔ)言中select的基本用法,具體使用情況還需要大家自己動(dòng)手實(shí)驗(yàn)使用過(guò)才能領(lǐng)會(huì)。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI