golang遍歷channel時return問題
今天我在遍歷channel裡的資料的時候加入了業務程式碼,業務程式碼裡有return,一但return之後遍歷就停止了,例如:
package main
import (
"fmt"
"sync"
"time"
)
func consumer(cname string, ch chan int) {
//可以迴圈 for i := range ch 來不斷從 channel 接收值,直到它被關閉。
for i := range ch {
time.Sleep(1*time.Second)
if i>20{
return
}
fmt.Println("consumer-----------", cname, ":", i)
}
fmt.Println("ch closed.")
}
func producer(pname string, ch chan int) {
for i := 0; i < 1000; i++ {
//time.Sleep(1*time.Second)
fmt.Println("producer--", pname, ":", i)
ch <- i
}
}
func main() {
//用channel來傳遞"產品", 不再需要自己去加鎖維護一個全域性的阻塞佇列
ch := make(chan int,500)
go producer("生產者", ch)
for i:=0;i<5;i++ {
go consumer("消費者", ch)
}
time.Sleep(1000 * time.Second)
close(ch)
time.Sleep(10 * time.Second)
}
i一旦大於20,從管道不斷消費資料就停止了,所以遍歷channel的時候不要放業務程式碼最好,放了是萬萬不能return的,當然panic同樣也是不允許的。
相關文章
- dfs的return時機問題
- Golang for迴圈遍歷小坑Golang
- java邊遍歷邊刪除的問題Java
- golang for range 遍歷 對比 PHP、pythonGolangPHPPython
- go channel問題Go
- 【經典演算法問題】馬的遍歷【回溯】演算法
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- Golang 的 Channel 控制Golang
- 遍歷List 同時 remove 元素REM
- HashMap原始碼:聊聊Map的遍歷效能問題(一)HashMap原始碼
- golang對遍歷目錄操作的最佳化Golang
- Python新手常見問題五:在遍歷列表的同時又修改該列表Python
- 面試題目-遍歷,點選面試題
- Golang 的 Channel 行為Golang
- Golang通道Channel詳解Golang
- golang-channel詳解Golang
- golang中channel的用法Golang
- golang開發:channel使用Golang
- 用python深度優先遍歷解迷宮問題Python
- Golang解決XORM的時區問題GolangORM
- js的map遍歷和array遍歷JS
- “馬的遍歷”問題的貪婪法解決演算法演算法
- List,Map在遍歷的時候removeREM
- Golang的陣列初始化方式及for-range遍歷Golang陣列
- 深入學習golang(2)—channelGolang
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- **PHP二維陣列遍歷時同時賦值PHP陣列賦值
- Python 使用 uiautormator 工具進行 App 遍歷所遇到的問題PythonUIORMAPP
- dfs深度優先搜尋解決迷宮類問題(遍歷)
- .增加兩個按鈕(prev,next)實現問題的遍歷
- jQuery 遍歷jQuery
- 遍歷 FlowDocument
- Javascript樹(一):廣度遍歷和深度遍歷JavaScript
- jQuery遍歷函式,javascript中的each遍歷jQuery函式JavaScript
- 《用好 Channel,用好 Golang》系列之 StreamGolang
- Golang —— goroutine(協程)和channel(管道)Golang
- Golang Channel 高併發的初始Golang