Go語言當中select的使用

字號+ 編輯: IT男在阿里 修訂: 面向ICU 來源: 利志分享 2023-09-07 我要說兩句(0)

select語句屬於條件分支流程控制語句,不過它只能用於通道。它可以包含若干條case語句,並根據條件選擇其中之一執行。

package main

import (
    "fmt"  
    "time"  
)

func main() {  
    // select语句属于条件分支流程控制语句,不过它只能用于通道。它可以包含若干条case语句,并根据条件选择其中之一执行。
    // select语句的case关键词只能后跟用于通道的发送操作的表达式以及接受操作的表达式或语句。  
    // golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。

    var ch1 = make(chan int)

    //生成一个协程
    go func() {
        for i := 0; i < 3; i++ {
            ch1 <- i
        }
    }()
    defer close(ch1)

    done := 0
    finished := 0
    for finished < 3 {
        select {
        case v, ok := <-ch1:
            if ok {
                done = done + 1
                fmt.Println(v)
            }
        }
        finished = finished + 1
    }
    fmt.Println("Done", done)

    //当for 和 select结合使用时,break语言是无法跳出for之外的,因此若要break出来,这里需要加一个标签,使用goto, 或者break 到具体的位置
    //这里是使用break样例
    i := 0
forend:  
    for {  
        select {  
        case <-time.After(time.Second * time.Duration(2)):  
            i++  
            if i == 5 {  
                fmt.Println("break now")  
                break forend  
            }  
            fmt.Println("inside the select: ")

        }
    }

    //这里使用goto
    i = 0
    for {
        select {
        case <-time.After(time.Second * time.Duration(2)):
            i++
            if i == 5 {
                fmt.Println("break now")
                goto ForEnd
            }
            fmt.Println("inside the select: ")
        }
        fmt.Println("inside the for: ")
    }
ForEnd:
}
閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • GO語言GORM如何更新字段

  • gorm如何創建記錄與模型定義需要注意什麽

  • gorm一般查詢與高級查詢

  • GORM時間戳跟蹤及CURD(增刪改查)

我要說說
網上賓友點評