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
- golang for range 遍歷 對比 PHP、pythonGolangPHPPython
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- HashMap原始碼:聊聊Map的遍歷效能問題(一)HashMap原始碼
- 用python深度優先遍歷解迷宮問題Python
- Python新手常見問題五:在遍歷列表的同時又修改該列表Python
- Golang 的 Channel 控制Golang
- golang對遍歷目錄操作的最佳化Golang
- Golang 的 Channel 行為Golang
- golang開發:channel使用Golang
- golang中channel的用法Golang
- Golang通道Channel詳解Golang
- golang-channel詳解Golang
- Python 使用 uiautormator 工具進行 App 遍歷所遇到的問題PythonUIORMAPP
- 面試題目-遍歷,點選面試題
- js的map遍歷和array遍歷JS
- Golang的陣列初始化方式及for-range遍歷Golang陣列
- dfs深度優先搜尋解決迷宮類問題(遍歷)
- 遍歷 FlowDocument
- Linuxshell遍歷Linux
- jQuery 遍歷jQuery
- Lambda 表示式遍歷集合時用remove方法刪除list集合中滿足條件的元素問題REM
- Golang Channel 高併發的初始Golang
- 《用好 Channel,用好 Golang》系列之 StreamGolang
- Golang —— goroutine(協程)和channel(管道)Golang
- 如何遍歷 HashMap,遍歷HashMap 的 5 種最佳方式HashMap
- jQuery的遍歷結構設計之遍歷同胞jQuery
- jQuery的遍歷結構設計之遍歷祖先jQuery
- jmeter_遍歷轉換浮點時間戳JMeter時間戳
- 陣列遍歷陣列
- 元組遍歷
- 集合迭代/遍歷
- TDictionary 的 遍歷
- jQuery 遍歷 – 祖先jQuery
- jQuery 遍歷方法jQuery
- 資料遍歷
- jstl forEach遍歷JS