package main
import (
"fmt"
)
func producer(ch chan int) {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch)
}
func consumer(ch chan int) {
for {
data, ok := <-ch
if!ok {
break
}
fmt.Printf("Consumed: %d\n", data)
}
fmt.Println("All data consumed.")
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
- 生产者函数:
producer
函数向通道 ch
写入数据,写完后关闭通道。
- 消费者函数:
consumer
函数通过 for { data, ok := <-ch }
这种方式读取通道数据,当 ok
为 false
时,表示通道已关闭,此时退出循环,确保所有数据都被处理且不会出现死锁或数据丢失。
- 主函数:在
main
函数中创建通道,启动生产者协程,然后调用消费者函数处理数据。