go語(yǔ)言編程之select信道處理示例詳解
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處理語(yǔ)句
case chan2:
// 如果chan2成功讀到數(shù)據(jù),則進(jìn)行該case處理語(yǔ)句
default:
// 如果上面都沒(méi)有成功,則進(jìn)行該case處理語(yǔ)句
}
}
fibonacci數(shù)列監(jiān)聽(tīng)
//fibonacci 1 1 2 3 5 8
package main
import (
"fmt"
)
//ch只寫(xiě),quit只讀
func fibonacci(ch chan<- int, quit <-chan bool) {
x, y := 1, 1
for {
//監(jiān)聽(tīng)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ù)字,寫(xiě)入channel
fibonacci(ch, quit)
}
1
1
2
3
5
8
13
21
flag = true
select監(jiān)聽(tīng)協(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寫(xiě)內(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語(yǔ)言編程之select信道處理示例詳解的詳細(xì)內(nèi)容,更多關(guān)于go語(yǔ)言select信道處理 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過(guò)程詳解
這篇文章主要為大家介紹了Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Golang初始化MySQL數(shù)據(jù)庫(kù)方法淺析
這篇文章主要介紹了Golang初始化MySQL數(shù)據(jù)庫(kù)的方法,數(shù)據(jù)庫(kù)的建立第一步即要初始化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-05-05
go?分布式鎖簡(jiǎn)單實(shí)現(xiàn)實(shí)例詳解
這篇文章主要為大家介紹了go?分布式鎖簡(jiǎn)單實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
一文深入探索Go語(yǔ)言中的循環(huán)結(jié)構(gòu)
在編程中,循環(huán)結(jié)構(gòu)扮演著重要的角色,它使我們能夠有效地重復(fù)執(zhí)行特定的代碼塊,以實(shí)現(xiàn)各種任務(wù)和邏輯,在Go語(yǔ)言中,for 是 Go 中唯一的循環(huán)結(jié)構(gòu),本文將深入探討Go語(yǔ)言中的for循環(huán)類(lèi)型以及它們的用法2023-08-08
Go 循環(huán)結(jié)構(gòu)for循環(huán)使用教程全面講解
這篇文章主要為大家介紹了Go 循環(huán)結(jié)構(gòu)for循環(huán)使用全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10

