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

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

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

一、select多路復用

1、select說明

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

具體格式如下:

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

2、select的使用 

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

import (
    "fmt"
    "time"
)

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

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

   //2.定義一個管道 5個數(shù)據(jù)string
	stringChan := make(chan string, 5)
	for i := 0; i < 5; i++ {
		stringChan <- "hello" + fmt.Sprintf("%d", i)
	}
	//使用select來獲取channel里面的數(shù)據(jù)的時候不需要關閉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 //注意退出...
		}
	}
}

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

相關文章

最新評論

炎陵县| 阳东县| 阜平县| 新源县| 安龙县| 綦江县| 上饶县| 内江市| 泽库县| 崇义县| 镇沅| 绵竹市| 莆田市| 唐河县| 图片| 东港市| 普格县| 永清县| 通江县| 日土县| 德安县| 黄浦区| 邢台市| 武邑县| 延津县| 万州区| 安徽省| 常熟市| 乳源| 汪清县| 彭山县| 招远市| 安阳市| 绩溪县| 长白| 康保县| 灵石县| 布拖县| 潼南县| 平谷区| 临澧县|