亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Go 語言的通道

Go 語言中有一個特殊的類型?chan,這是在 Go 語言的多線程操作中非常重要的一個數(shù)據(jù)類型。它的一般用于線程之間的數(shù)據(jù)傳輸,所以這個操作類型叫做"通道(channel)"。

 

1. 通道的聲明和定義

通道可以理解為一種特殊的變量,所以它的聲明和其它變量的聲明并沒有太大的區(qū)別,聲明通道變量的寫法如下:

var c chan int //聲明一個存放int類型數(shù)據(jù)的通道
代碼塊
  • 1

但是它聲明之后并不能直接使用,需要使用內(nèi)置函數(shù)?make()?來創(chuàng)建一下通道變量才可以使用:

Tips:由于chan的底層是一個指針,在Go語言中指針初始值為空,是需要實例化的。make就是示例化了chan。

代碼塊
  • 1 ?var c chan int //聲明一個存放int類型數(shù)據(jù)的通道
  • 2? c = make(chan int, 1) //創(chuàng)建一個長度為1的通道

在這種情況下最好使用:=來同時聲明和創(chuàng)建:

代碼塊
  • 1? c := make(chan int, 1) //聲明并創(chuàng)建一個存放int類型數(shù)據(jù)的通道

 

2. 通道的使用

在 Go 語言中,使用?<-?符號來向通道中塞取數(shù)據(jù)。放在通道右邊?chan <-,就是塞數(shù)據(jù),放在通道左邊?<- chan?,就是取數(shù)據(jù)。

代碼示例

代碼塊
  • 1? func main() {
  • 2? ? ? ? c := make(chan int, 1)
  • 3? ? ? ? c <- 10 //將10塞入通道中
  • 4? ? ? ? i := <-c //將10從通道中取出,并賦值給變量i
  • 5? ? ? ? fmt.Println(i)
  • 6? }

執(zhí)行結(jié)果

圖片描述

 

3. 通道結(jié)合 select 流程控制

在 Go 語言中為了更方便的利用通道的功能,提供了一個僅用于通道的流程控制語句:select...case。使用這個語句可以同時監(jiān)聽數(shù)個通道,非常適合用于并發(fā)時的進程調(diào)度,或者模塊之間的解耦合。這些在后續(xù)的文章中會有詳細(xì)介紹,下面通過一個簡單的例子來了解一下?select...case?語句。

代碼示例

代碼塊
  • 1? package main
  • 2
  • 3? import "fmt"
  • 4
  • 5? func main() {
  • 6? ? ? ? c := make(chan int, 1)
  • 7
  • 8? ? ? ? for a := 0; a < 2; a++ {
  • 9? ? ? ? ? ? ? ? select {
  • 10? ? ? ? ? ? ? case i := <-c:
  • 11? ? ? ? ? ? ? ? ? ? ? ? fmt.Println("從通道中取出", i)
  • 12? ? ? ? ? ? ? case c <- 10:
  • 13? ? ? ? ? ? ? ? ? ? ? ? fmt.Println("將 10 塞入通道中")
  • 14? ? ? ? ? ? ? }
  • 15? ? ? ? }
  • 16? }
  • 第 8 行:寫一個兩次的循環(huán),若是在多線程中,一般寫成死循環(huán);
  • 第 9 行:select 關(guān)鍵字做為 select 語句的起始;
  • 第 10 行:若 c 通道中存在數(shù)據(jù),則取出,并執(zhí)行后續(xù)語句;
  • 第 12 行:若通道未滿,將 10 塞入通道中。

Tips:select語句和switch語句一樣,case都只會執(zhí)行一個,然后立刻跳出語句

執(zhí)行結(jié)果

圖片描述

 

4. 小結(jié)

本文介紹了 Go 語言中特有的類型通道(chan)的用法,以及select...case這個 Go 語言中獨有的流程控制語句。通道使用的時候注意需要?make()?內(nèi)置函數(shù)先創(chuàng)建,不然只是個空指針,無法使用。select...case的?case?之后只能跟獲取通道數(shù)據(jù)或者塞數(shù)據(jù)進通道。

文章來源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機構(gòu)!