golang chan和select的使用

2021-09-26 14:17:24 字數 1469 閱讀 8645

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

package main

import (

"fmt"

"time"

)var in1=make(chan int,10)

var in2=make(chan int,1)

func f11() }}

func f22()

}func f33()

func main()

1、如果有多個case都可以執行,select會隨機公平地選出乙個執行,其他不會執行。從執行結果中可以看出,當通道in1和in2都有資料時(in2是用於結束for迴圈),多次執行結果不同。

當chan通道為空時,

package main

import (

"fmt"

"time"

)var in3=make(chan int,1)

func ff()

}func main()

當注釋掉**「in3

in33、close(chan) 使所有通道的接受者都進入非阻塞

package main

import (

"fmt"

"time"

)var in=make(chan int,1)

func f1() }}

func f2() }}

func main()

當close(in)和in

當只注釋掉close(in)只會阻塞其中乙個協程

當close(in)取消注釋,兩個協程都會進入非阻塞––

golang chan資料型別

golang資料型別有基本資料型別 int float long double string 也包含有 struct array map point型別,具體定義是如何使用的 package concurrent import fmt import time type people struct v...

golang chan 踩坑 通道特性

golang 在協程中都會用到chan 用於資料同步,在併發場景下一般都會使用到這個,簡單場景就是乙個讀取,乙個寫入,所以chan都是成對出現的,現在主要來說明一下有緩衝和無緩衝的場景對比。ch1 make chan int 無緩衝 ch2 make chan int,1 有緩衝 ch1 5 無緩衝...

golang chan 單項通道與多項通道

package main import fmt func main 雙項通道 var read test chan inte ce 單項通道 只支援 讀 var write test chan inte ce 單項通道 只支援 寫 read test xiao 會報錯。因為這個通道 只是單項通道只支...