go語言中 select的使用方法

2022-08-21 19:42:12 字數 861 閱讀 7553

早期的select函式是用來監控一系列的檔案控制代碼,一旦其中乙個檔案控制代碼發生io操作,該select呼叫就會被返回。golang在語言級別直接支援select,用於處理非同步io問題。

select用法同switch類似,如下:

timeout :=make (chan bool,1)

ch := make(chan int)

select

可以看出,ch初始化後,case1讀取失敗,timeout同樣失敗,因為channel中無資料,直接跳至default執行並返回。

注意,如果沒有default,select 會一直等待等到某個 case 語句完成, 也就是等到成功從 ch 或者 timeout 中讀到資料,否則一直阻塞。

基於這種機制,可以使用select實現channel讀取超時的機制

package main

import (

"fmt"

"time"

)func main() ()

ch := make(chan int)

select

}

注意這裡一定不能用default,否則3s超時還未到直接執行default,case2便不會執行,超時機制便不會實現。timeout會在3s超時後讀取到資料。

使用select判斷channel是否存滿

ch1 := make(chan int, 1)

ch2 := make(chan int, 1)

select

如果case1、case2均未執行,則說明ch1&ch2已滿,over.....

29 Go 語言中的 select 用法

流程控制 switch case go 語言中的型別斷言 今天要學習乙個跟switch case很像,但還有點個人特色的select case,這一節本應該放在 學習 go 協程 詳解通道 通道 裡一起講的,但是當時漏了,直到有讀者給我提出,才注意到,今天就用這篇文章補充一下。跟 switch ca...

Go語言中defer的使用

func print a int func add a,b int int fmt.println add 4,3 上面這段 defer語句輸出的是4,add返回的值是7。defer可以用於檔案的開啟和關閉,鎖的開啟和關閉。package ioutil func readfile filename ...

Go語言中Range的使用

go 語言中 range 關鍵字用於 for 迴圈中迭代陣列 array 切片 slice 通道 channel 或集合 map 的元素。在陣列和切片中它返回元素的索引和索引對應的值,在集合中返回 key value 對。package main import fmt func main sum 0...