package main
import (
"fmt"
)
func producer(ch chan int) {
for i := 1; i <= 10; i++ {
ch <- i
}
close(ch)
}
func consumer(ch chan int) {
for num := range ch {
fmt.Println(num)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
- producer 函数:
- 该函数负责生成数字序列。它使用一个
for
循环从1到10,将每个数字通过通道 ch
发送出去。
- 当数字发送完毕后,使用
close(ch)
关闭通道,这会通知所有从该通道接收数据的 for... range
循环结束。
- consumer 函数:
- 该函数通过
for... range
从通道 ch
接收数据。只要通道没有关闭且有数据,num
就会接收到从通道发送过来的数字并打印。
- main 函数:
- 创建一个整型通道
ch
。
- 使用
go
关键字启动 producer
协程,使其在后台并发执行。
- 调用
consumer
函数,开始消费和打印从通道接收的数字。这样就能确保数字按顺序被消费和打印。