網站首頁 編程語言 正文
select信道處理
注意:有default就不會阻塞
package main func main() { var chan1 = make(chan int) var chan2 = make(chan int) select { case <-chan1: // 如果chan1成功讀到數據,則進行該case處理語句 case chan2: // 如果chan2成功讀到數據,則進行該case處理語句 default: // 如果上面都沒有成功,則進行該case處理語句 } }
fibonacci數列監聽
//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 { //監聽channel數據的流動 select { case ch <- x: x, y = y, x+y case flag := <-quit: fmt.Println("flag = ", flag) return } } } func main() { ch := make(chan int) //數字通信 quit := make(chan bool) //程序是否結束 //消費者,從channel讀取內容 //新建協程 go func() { for i := 0; i < 8; i++ { num := <-ch fmt.Println(num) } //可以停止 quit <- true }() //別忘了() //生產者,產生數字,寫入channel fibonacci(ch, quit) } 1 1 2 3 5 8 13 21 flag = true
select監聽協程
func main() { //創建一個有緩存的channel ch := make(chan int, 0) //len(ch)緩沖區剩余數據個數, cap(ch)緩沖區大小 //新建協程 go func() { for i := 0; i < 10; i++ { ch <- i //往chan寫內容 } }() 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!") } }
原文鏈接:https://www.cnblogs.com/guyouyin123/p/13986339.html
相關推薦
- 2022-07-09 利用go語言實現查找二叉樹中的最大寬度_Golang
- 2022-04-22 Object.assign()是深拷貝還是淺拷貝
- 2022-06-18 android實現在圖標上顯示數字_Android
- 2022-08-05 從List<Map>中截取指定的范圍數據集合
- 2022-09-03 Go語言函數的延遲調用(Deferred?Code)詳解_Golang
- 2024-01-16 解決 git pull 操作后文件權限變化
- 2022-07-21 cartographer 編譯遇到 abseil的問題
- 2022-10-28 react如何向數組中追加值_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支