使用range从channel读数据
当需要从通道中读取多个值时,使用range
是常用模式:
package main
import (
"fmt"
)
func foo(ch chan int) {
ch <- 1
ch <- 2
close(ch)
}
func main() {
ch := make(chan int)
go foo(ch)
for n := range ch {
fmt.Println(n)
}
fmt.Println("channel is now closed")
}
---------Output---------
1
2
channel is now closed
使用for range
循环是从通道读取数据的三种方式之一。
通道被关闭后循环也会随即终止。
这是实现工作者协程池的常用模式:
创建单个通道供所有工作者协程使用
启动工作者协程
工作者协程中使用
for v := range chan
从通道中获取作业进行处理在所有作业入队之后关闭通道,因此所有工作者协程也会在它们处理完通道中的作业后结束
最后更新于
这有帮助吗?