最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言select語句用法示例

 更新時(shí)間:2022年08月03日 14:23:30   作者:六號(hào)積極分子  
這篇文章主要為大家介紹了Go語言select語句用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

用法

多個(gè)通道 Channel 中信息的發(fā)送和接受處理的專用的語句—select 語句。select 語句會(huì)阻塞,直到其中的一個(gè)發(fā)送/接收操作準(zhǔn)備好。select 語句和 switch 語句有點(diǎn)相似,但 select 語句在被執(zhí)行時(shí)會(huì)選擇執(zhí)行其中的一個(gè)分支,且選擇分支的方法完全是不相同的。

ch1 = make(chan string)
ch2 = make(chan string)
ch1 <- "server1"
ch2 <- "server1"
select {
    case i := <- ch1:
      fmt.Printf("從ch1讀取了數(shù)據(jù)%d", i)
    case j := <- ch2:
      fmt.Printf("從ch2讀取了數(shù)據(jù)%d", i)
    default:
      fmt.Printf("no action...", i)
}

以上代碼中,每個(gè) case 后都只針對某個(gè)通道的接收語句,這個(gè)和 switch 不同,也沒有 break。switch 語句右邊是一個(gè)switch 表達(dá)式,但 select 右邊是接大括號(hào)。

開始執(zhí)行 select 語句時(shí),所有跟在 case 關(guān)鍵字右邊的表達(dá)式都會(huì)被求值,求值的順序是自上而下,從左到右的。

使用場景

實(shí)現(xiàn)收發(fā)功能

select 是控制 channel 必不可少的部分,channel 的主要功能就是收發(fā)信息,基于此可以設(shè)計(jì)一個(gè)生產(chǎn)者消費(fèi)者功能。生產(chǎn)者發(fā)送消息,消費(fèi)者接受消息

func main(){
// 生產(chǎn)數(shù)據(jù),將數(shù)據(jù)寫入 channel 
  n1 := make(chan int)
    go func() {
        i := 0
        for {
            time.Sleep(time.Duration(rand.Intn(1000)) * time.Millisecond)
            n1 <- i
            i++
        }
    }()
    n2 := make(chan int)
    go func() {
        i := 0
        for {
            time.Sleep(time.Duration(rand.Intn(1000)) * time.Millisecond)
            n2 <- i
            i++
        }
    }()
// 從 channel 中讀取到數(shù)據(jù)就輸出
    for {
        select {
        case n := <-n1:
            fmt.Printf("從ch1讀取了數(shù)據(jù)%d", n)
        case n := <-n2:
            fmt.Printf("從ch1讀取了數(shù)據(jù)%d", n)
        }
    }
}

注意事項(xiàng)

  • select 只能用于 chan 的 IO 操作
  • select 的 case 都是并行的,case 讀取到數(shù)據(jù)就執(zhí)行,但是如果沒有讀取到且未設(shè)置 default 將導(dǎo)致阻塞
  • 盡量設(shè)置 default 避免沒有 IO 操作發(fā)生時(shí),select 語句一直阻塞,直到某個(gè) case 分支命中
  • 如果是空的 select 有可能會(huì)引起死鎖,所以在 select 執(zhí)行過程中,必須命中某一 case 分支
select {}
  • 防止阻塞還有一個(gè)方法:設(shè)置超時(shí)

以上就是Go語言select語句用法示例的詳細(xì)內(nèi)容,更多關(guān)于Go select語句的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入了解Golang官方container/heap用法

    深入了解Golang官方container/heap用法

    在?Golang?的標(biāo)準(zhǔn)庫?container?中,包含了幾種常見的數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),其實(shí)是非常好的學(xué)習(xí)材料。今天我們就來看看?container/heap?的源碼,了解一下官方的同學(xué)是怎么設(shè)計(jì),我們作為開發(fā)者又該如何使用
    2022-10-10
  • Go語言中slice作為參數(shù)傳遞時(shí)遇到的一些“坑”

    Go語言中slice作為參數(shù)傳遞時(shí)遇到的一些“坑”

    這篇文章主要給大家介紹了關(guān)于Go語言中slice作為參數(shù)傳遞時(shí)遇到的一些“坑”,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Go語言網(wǎng)站使用異步編程和Goroutine提高Web的性能

    Go語言網(wǎng)站使用異步編程和Goroutine提高Web的性能

    作為一門現(xiàn)代化編程語言,Go語言提供了強(qiáng)大的異步編程能力,使得程序員可以以更高效的方式處理并發(fā)任務(wù),在Go語言中,使用Goroutine在單個(gè)進(jìn)程中實(shí)現(xiàn)多任務(wù)并行處理,以及如何使用協(xié)程池來進(jìn)一步提高Web服務(wù)器的處理能力,
    2024-01-01
  • 詳解Golang time包中的結(jié)構(gòu)體time.Ticker

    詳解Golang time包中的結(jié)構(gòu)體time.Ticker

    在日常開發(fā)過程中,會(huì)頻繁遇到對時(shí)間進(jìn)行操作的場景,使用 Golang 中的 time 包可以很方便地實(shí)現(xiàn)對時(shí)間的相關(guān)操作,接下來的幾篇文章會(huì)詳細(xì)講解 time 包,本文講解一下 time 包中的結(jié)構(gòu)體 time.Ticker,需要的朋友可以參考下
    2023-08-08
  • go-cqhttp智能聊天功能的實(shí)現(xiàn)

    go-cqhttp智能聊天功能的實(shí)現(xiàn)

    這篇文章主要介紹了go-cqhttp智能聊天功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • go-zero熔斷機(jī)制組件Breaker接口定義使用解析

    go-zero熔斷機(jī)制組件Breaker接口定義使用解析

    這篇文章主要為大家介紹了go-zero熔斷機(jī)制組件Breaker接口定義使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Go語言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用

    Go語言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用

    本文主要介紹了Go語言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Go語言下載網(wǎng)絡(luò)圖片或文件的方法示例

    Go語言下載網(wǎng)絡(luò)圖片或文件的方法示例

    這篇文章主要介紹了Go語言下載網(wǎng)絡(luò)圖片或文件的方法示例,文中通過示例代碼介紹的非常詳細(xì),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 使用Gin框架返回JSON、XML和HTML數(shù)據(jù)

    使用Gin框架返回JSON、XML和HTML數(shù)據(jù)

    Gin是一個(gè)高性能的Go語言Web框架,它不僅提供了簡潔的API,還支持快速的路由和中間件處理,在Web開發(fā)中,返回JSON、XML和HTML數(shù)據(jù)是非常常見的需求,本文將介紹如何使用Gin框架來返回這三種類型的數(shù)據(jù),需要的朋友可以參考下
    2024-08-08
  • 解析Golang和Java的優(yōu)勢與劣勢

    解析Golang和Java的優(yōu)勢與劣勢

    Golang和Java是兩種流行的編程語言,它們在很多方面有著相似之處,但也存在一些重要的區(qū)別,本文將對Golang和Java進(jìn)行對比,探討它們的特點(diǎn)和適用場景,需要的朋友可以參考下
    2023-10-10

最新評論

五莲县| 永新县| 体育| 玉门市| 虹口区| 山东省| 邢台县| 太仆寺旗| 黑龙江省| 西城区| 湖南省| 曲水县| 太和县| 富阳市| 溧水县| 昆明市| 揭阳市| 于都县| 锦州市| 太湖县| 高尔夫| 巨野县| 榕江县| 汉寿县| 博野县| 潼关县| 鄂伦春自治旗| 陆河县| 荣昌县| 寿阳县| 湟中县| 龙井市| 保靖县| 二手房| 承德县| 星座| 剑川县| 丰台区| 江口县| 永吉县| 宜良县|