關於golang select的用法


1 go的信道

1.1 什么是信道

信道可以理解為go協程之間進行通信的通道。

1.2 信道的聲明

所有的信道都關聯一個類型,一旦關聯了類型,該信道就只能傳輸該類型的數據,傳輸其它類型的數據的話就是非法的。

chan T表示t類型的信道。

var b chan int,聲明一個信道b

1.3 定義一個信道

b := make(chan int)

1.4 通過信道進行數據的發送和接收

箭頭離開信道表示從信道中接收數據:data := <- b

箭頭指向信道的話,就是發送數據 : b <- data

1.5 信道的發送和接收默認是阻塞的

當把數據發送給信道時,程序控制會在發送數據的語句處阻塞,直到有其它go協程從信道中讀取數據才會解除阻塞。讀取信道時,如果沒有其它協程把數據寫入該信道,讀取過程也會阻塞。

2 什么是select

select是用於通信的switch語句,每條case是一個信道操作,如果有數據讀寫,那么select會隨機選擇一個執行,然后退出整個select,如果沒有讀寫,那么阻塞,或者執行default,然后退出。

也就是說,一次select執行只會執行case或者default中的一個分支。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM