go語言編程之select信道處理示例詳解
更新時間:2022年04月14日 08:27:29 作者:Jeff的技術棧
這篇文章主要為大家介紹了go語言編程之select信道處理示例詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
select信道處理
注意:有default就不會阻塞
package main
func main() {
var chan1 = make(chan int)
var chan2 = make(chan int)
select {
case <-chan1:
// 如果chan1成功讀到數(shù)據(jù),則進行該case處理語句
case chan2:
// 如果chan2成功讀到數(shù)據(jù),則進行該case處理語句
default:
// 如果上面都沒有成功,則進行該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ù)的流動
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) //程序是否結束
//消費者,從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)建一個有緩存的channel
ch := make(chan int, 0)
//len(ch)緩沖區(qū)剩余數(shù)據(jù)個數(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信道處理示例詳解的詳細內(nèi)容,更多關于go語言select信道處理 的資料請關注腳本之家其它相關文章!
相關文章
Go+Kafka實現(xiàn)延遲消息的實現(xiàn)示例
本文主要介紹了Go+Kafka實現(xiàn)延遲消息的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07
Go語言結合grpc和protobuf實現(xiàn)去中心化的聊天室
這篇文章主要為大家詳細介紹了Go語言如何結合grpc和protobuf實現(xiàn)去中心化的聊天室,文中的示例代碼講解詳細,有需要的小伙伴可以跟隨小編一起學習一下2024-03-03
Go strconv包實現(xiàn)字符串和基本數(shù)據(jù)類型轉換的實例詳解
在Go語言(Golang)的編程實踐中,strconv包是一個非常重要的標準庫,它提供了在基本數(shù)據(jù)類型(如整型、浮點型、布爾型)和字符串之間的轉換功能,本文給大家介紹了關于Go語言字符串轉換strconv,需要的朋友可以參考下2024-09-09

