go關鍵字之select

2022-03-12 16:17:35 字數 1057 閱讀 7008

select是go中的乙個控制結構,類似於switch語句,用於處理非同步io操作。select會監聽case語句中channel的讀寫操作,當case中channel讀寫操作為非阻塞狀態(即能讀寫)時,將會觸發相應的動作。

select中的case語句必須是乙個channel操作

select中的default子句總是可執行的。如果有多個case都可以執行,select會隨機公平地選出乙個執行,其他不會執行。

如果沒有可執行的case語句,且有default語句,那麼就會執行default的動作。

如果沒有可執行的case語句,且沒有default語句,select將阻塞,直到某個case通訊可以執行典型用法

1.超時判斷

//比如在下面的場景中,使用全域性reschan來接受response,如果時間超過3s,reschan中還沒有資料返回,則第二條case將執行

var reschan = make(chan int)//

do request

func test()

}func dodata(data

int)

2.退出

//主線程(協程)中如下:

var shouldquit=make(chan struct

{})fun main()

//...out of the loop

select

//...}//

再另外乙個協程中,如果執行遇到非法操作或不可處理的錯誤,就向shouldquit傳送資料通知程式停止執行

close(shouldquit)

3.判斷channel是否阻塞

//在某些情況下是存在不希望channel快取滿了的需求的,可以用如下方法判斷

ch := make (chan int, 5)//

...data:=0

select

---------------------

參考:

注:select主要進行channel狀態的判斷,本質是channel能否有資料讀出,通過該判斷進行一些有趣的應用。

go語言基礎 關鍵字

定義 被程式語言保留而不讓程式設計人員作為識別符號使用的字串行,也可以稱為保留字 go語言中的關鍵字 go語言關鍵共計25個 chan func inte ce map和struct用來宣告和定義go語言的復合資料型別,分別與go語言的復合資料型別channel 通道 function 函式 int...

new關鍵字 this關鍵字 base關鍵字

使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...

this關鍵字 static關鍵字

1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...