package main
import (
"fmt"
)
func producer(ch chan<- int) {
for i := 0; ; i++ {
ch <- i
}
close(ch)
}
func consumer(ch <-chan int) {
for num := range ch {
fmt.Println("Consumed:", num)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
- 生产者函数
producer
:
- 该函数接受一个只写通道
ch
。
- 使用无限循环
for i := 0; ; i++
持续生成整数 i
并发送到通道 ch
中。
- 理论上,这里无限循环会一直运行,不过在实际情况中如果有其他逻辑来停止循环,循环结束后会调用
close(ch)
关闭通道。
- 消费者函数
consumer
:
- 该函数接受一个只读通道
ch
。
- 使用
for num := range ch
从通道 ch
中接收数据,当通道关闭且所有数据都被接收完后,这个循环会自动结束。每接收到一个数据 num
,就打印出来。
main
函数:
- 创建一个无缓冲通道
ch
。
- 使用
go
关键字启动一个协程来运行 producer
函数。
- 调用
consumer
函数来消费数据。