亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入剖析Go語言中的Select語句

 更新時(shí)間:2023年12月11日 11:03:41   作者:奔跑的蝸牛.  
select是Go中的一個(gè)控制結(jié)構(gòu),類似于switch語句,本文主要介紹了深入剖析Go語言中的Select語句,具有一定的參考價(jià)值,感興趣的可以了解一下

一、select多路復(fù)用

1、select說明

  • 傳統(tǒng)的方法在遍歷管道時(shí),如果不關(guān)閉會(huì)阻塞而導(dǎo)致deadlock,在實(shí)際開發(fā)中,可能我們不好確定什么關(guān)閉該管道
  • 這種方式雖然可以實(shí)現(xiàn)從多個(gè)管道接收值的需求,但是運(yùn)行性能會(huì)差很多
  • 為了應(yīng)對(duì)這種場(chǎng)景,Go內(nèi)置了select關(guān)鍵字,可以同時(shí)響應(yīng)多個(gè)管道的操作
  • select的使用類似于switch語句,它有一系列case分支和一個(gè)默認(rèn)的分支
  • 每個(gè)case會(huì)對(duì)應(yīng)一個(gè)管道的通信(接收或發(fā)送)過程
  • select會(huì)一直等待,直到某個(gè)case的通信操作完成時(shí),就會(huì)執(zhí)行case分支對(duì)應(yīng)的語句

具體格式如下:

select {
    case <- chan1:
    //如果chan1成功讀到數(shù)據(jù),則進(jìn)行該case處理語句
    case chan2 <- 1 :
       //如果成功向chan2寫入數(shù)據(jù),則進(jìn)行該case處理語句
    default :
    //如果上面都沒有成功,則進(jìn)入default處理流程
    
}

2、select的使用 

  • 使用select語句能提高代碼的可讀性
  • 可處理一個(gè)或多個(gè)channel的發(fā)送/接收操作
  • 如果多個(gè)caes同時(shí)滿足,select會(huì)隨機(jī)選擇一個(gè)
  • 對(duì)于沒有case的select{}會(huì)一直等待,可用于阻塞main函數(shù)
package main

import (
    "fmt"
    "time"
)

func main() {
    //在某些場(chǎng)景下我們需要同時(shí)從多個(gè)通道接收數(shù)據(jù),這個(gè)時(shí)候就可以用到golang中給我們提供的select多路復(fù)用

    //定義一個(gè)管道10個(gè)數(shù)據(jù)int
    intChan := make(chan int,10)
    for i :=0;i<10;i++ {
        intChan <- i
    }

   //2.定義一個(gè)管道 5個(gè)數(shù)據(jù)string
	stringChan := make(chan string, 5)
	for i := 0; i < 5; i++ {
		stringChan <- "hello" + fmt.Sprintf("%d", i)
	}
	//使用select來獲取channel里面的數(shù)據(jù)的時(shí)候不需要關(guān)閉channel
	for {
		select {
		case v := <-intChan:
			fmt.Printf("從 intChan 讀取的數(shù)據(jù)%d\n", v)
			time.Sleep(time.Millisecond * 50)
		case v := <-stringChan:
			fmt.Printf("從 stringChan 讀取的數(shù)據(jù)%v\n", v)
			time.Sleep(time.Millisecond * 50)
		default:
			fmt.Printf("數(shù)據(jù)獲取完畢")
			return //注意退出...
		}
	}
}

 到此這篇關(guān)于深入剖析Go語言中的Select語句的文章就介紹到這了,更多相關(guān)Go語言Select語句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言中map集合的具體使用

    Go語言中map集合的具體使用

    本文主要介紹了Go語言中map集合的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 一文詳解如何在Golang中實(shí)現(xiàn)JWT認(rèn)證與授權(quán)

    一文詳解如何在Golang中實(shí)現(xiàn)JWT認(rèn)證與授權(quán)

    在現(xiàn)代Web應(yīng)用中,安全性是一個(gè)非常重要的課題,JWT作為一種常用的認(rèn)證與授權(quán)機(jī)制,已被廣泛應(yīng)用于各種系統(tǒng)中,下面我們就來看看如何在Golang中實(shí)現(xiàn)JWT認(rèn)證與授權(quán)吧
    2025-03-03
  • 使用Go語言中的Context取消協(xié)程執(zhí)行的操作代碼

    使用Go語言中的Context取消協(xié)程執(zhí)行的操作代碼

    在 Go 語言中,協(xié)程(goroutine)是一種輕量級(jí)的線程,非常適合處理并發(fā)任務(wù),然而,如何優(yōu)雅地取消正在運(yùn)行的協(xié)程是一個(gè)常見的問題,本文將通過一個(gè)具體的例子來展示如何使用 context 包來取消協(xié)程的執(zhí)行,需要的朋友可以參考下
    2024-11-11
  • Go?Excelize?API源碼閱讀Close及NewSheet方法示例解析

    Go?Excelize?API源碼閱讀Close及NewSheet方法示例解析

    這篇文章主要為大家介紹了Go?Excelize?API源碼閱讀Close及NewSheet方法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go如何優(yōu)雅的使用字節(jié)池示例詳解

    Go如何優(yōu)雅的使用字節(jié)池示例詳解

    在編程開發(fā)中,我們經(jīng)常會(huì)需要頻繁創(chuàng)建和銷毀同類對(duì)象的情形,這樣的操作很可能會(huì)對(duì)性能造成影響,這時(shí)常用的優(yōu)化手段就是使用對(duì)象池(object pool),這篇文章主要給大家介紹了關(guān)于Go如何優(yōu)雅的使用字節(jié)池的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Go高級(jí)特性探究之處理1分鐘百萬請(qǐng)求詳解

    Go高級(jí)特性探究之處理1分鐘百萬請(qǐng)求詳解

    對(duì)于大型的互聯(lián)網(wǎng)應(yīng)用程序,如電商平臺(tái)、社交網(wǎng)絡(luò)、金融交易平臺(tái)等,每秒鐘都會(huì)收到大量的請(qǐng)求,那么Go是如何處理這些百萬請(qǐng)求的呢,下面就來和大家詳細(xì)講講
    2023-06-06
  • golang中interface接口的深度解析

    golang中interface接口的深度解析

    什么是interface,簡(jiǎn)單的說,interface是一組method的組合,下面這篇文章主要給大家深度解析了關(guān)于golang中的interface接口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • golang?chan傳遞數(shù)據(jù)的性能開銷詳解

    golang?chan傳遞數(shù)據(jù)的性能開銷詳解

    這篇文章主要為大家詳細(xì)介紹了Golang中chan在接收和發(fā)送數(shù)據(jù)時(shí)因?yàn)椤皬?fù)制”而產(chǎn)生的開銷,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-01-01
  • Go語言接口定義與用法示例

    Go語言接口定義與用法示例

    這篇文章主要介紹了Go語言接口定義與用法,較為詳細(xì)的分析了Go語言中接口的概念、定義、用法,需要的朋友可以參考下
    2016-07-07
  • GO語言的數(shù)組array與切片slice詳解

    GO語言的數(shù)組array與切片slice詳解

    這篇文章主要介紹了GO語言的數(shù)組array與切片slice,包括了GO語言數(shù)組定義賦值,GO語言多維數(shù)組,GO語言切片等知識(shí)點(diǎn)需要的朋友可以參考下
    2022-12-12

最新評(píng)論