package main
import (
"fmt"
)
func producer(ch chan int) {
for i := 0; i < 10; 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)
go consumer(ch)
select {}
}
producer
函数:
- 此函数负责向通道
ch
发送整数。
- 使用
for
循环发送 0
到 9
这10个整数。
- 发送完成后,使用
close(ch)
关闭通道,这是Go语言中向接收者表明不再有数据发送的常用方式。
consumer
函数:
- 使用
for... range
循环从通道 ch
接收数据。
for num := range ch
会一直阻塞,直到通道关闭且所有数据都被接收,这种方式可以确保在通道关闭前不会退出循环。
- 每次接收到数据后,打印出消费的数据。
main
函数:
- 创建一个整数类型的通道
ch
。
- 使用
go
关键字启动生产者和消费者的 goroutine。
select {}
语句会永远阻塞,防止 main
函数退出,从而使整个程序持续运行,直到生产者完成数据发送且消费者消费完所有数据。