go語言編程之select信道處理示例詳解
更新時(shí)間:2022年04月14日 08:27:29 作者:Jeff的技術(shù)棧
這篇文章主要為大家介紹了go語言編程之select信道處理示例詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
select信道處理
注意:有default就不會(huì)阻塞
package main func main() { var chan1 = make(chan int) var chan2 = make(chan int) select { case <-chan1: // 如果chan1成功讀到數(shù)據(jù),則進(jìn)行該case處理語句 case chan2: // 如果chan2成功讀到數(shù)據(jù),則進(jìn)行該case處理語句 default: // 如果上面都沒有成功,則進(jìn)行該case處理語句 } }
fibonacci數(shù)列監(jiān)聽
//fibonacci 1 1 2 3 5 8 package main import ( "fmt" ) //ch只寫,quit只讀 func fibonacci(ch chan<- int, quit <-chan bool) { x, y := 1, 1 for { //監(jiān)聽channel數(shù)據(jù)的流動(dòng) select { case ch <- x: x, y = y, x+y case flag := <-quit: fmt.Println("flag = ", flag) return } } } func main() { ch := make(chan int) //數(shù)字通信 quit := make(chan bool) //程序是否結(jié)束 //消費(fèi)者,從channel讀取內(nèi)容 //新建協(xié)程 go func() { for i := 0; i < 8; i++ { num := <-ch fmt.Println(num) } //可以停止 quit <- true }() //別忘了() //生產(chǎn)者,產(chǎn)生數(shù)字,寫入channel fibonacci(ch, quit) } 1 1 2 3 5 8 13 21 flag = true
select監(jiān)聽協(xié)程
func main() { //創(chuàng)建一個(gè)有緩存的channel ch := make(chan int, 0) //len(ch)緩沖區(qū)剩余數(shù)據(jù)個(gè)數(shù), cap(ch)緩沖區(qū)大小 //新建協(xié)程 go func() { for i := 0; i < 10; i++ { ch <- i //往chan寫內(nèi)容 } }() ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) go func(ctx context.Context) { ticker := time.NewTicker(1 * time.Second) for _ = range ticker.C { select { case <-ctx.Done(): fmt.Println("child process interrupt...") return default: fmt.Printf("send message: %d\n", <-ch) } } }(ctx) defer close(ch) defer cancel() select { case <-ctx.Done(): time.Sleep(1 * time.Second) fmt.Println("main process exit!") } }
以上就是go語言編程之select信道處理示例詳解的詳細(xì)內(nèi)容,更多關(guān)于go語言select信道處理 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過程詳解
這篇文章主要為大家介紹了Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Golang初始化MySQL數(shù)據(jù)庫(kù)方法淺析
這篇文章主要介紹了Golang初始化MySQL數(shù)據(jù)庫(kù)的方法,數(shù)據(jù)庫(kù)的建立第一步即要初始化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-05-05go?分布式鎖簡(jiǎn)單實(shí)現(xiàn)實(shí)例詳解
這篇文章主要為大家介紹了go?分布式鎖簡(jiǎn)單實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09一文深入探索Go語言中的循環(huán)結(jié)構(gòu)
在編程中,循環(huán)結(jié)構(gòu)扮演著重要的角色,它使我們能夠有效地重復(fù)執(zhí)行特定的代碼塊,以實(shí)現(xiàn)各種任務(wù)和邏輯,在Go語言中,for 是 Go 中唯一的循環(huán)結(jié)構(gòu),本文將深入探討Go語言中的for循環(huán)類型以及它們的用法2023-08-08Go 循環(huán)結(jié)構(gòu)for循環(huán)使用教程全面講解
這篇文章主要為大家介紹了Go 循環(huán)結(jié)構(gòu)for循環(huán)使用全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10