面试题答案
一键面试- 实现思路:
- 消费者通过
for... range
循环从通道接收数据。for... range
会在通道关闭且通道内数据全部消费完时自动退出循环,从而确保能正确消费完通道内剩余的数据,同时避免无效的接收操作。
- 消费者通过
- 代码示例(以Go语言为例):
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 num := range ch {
fmt.Println("Consumed:", num)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
在上述代码中:
producer
函数向通道ch
发送0到4的数据,然后关闭通道。consumer
函数使用for... range
从通道ch
接收数据,在通道关闭且数据消费完后,for... range
循环自动结束,不会有无效的接收操作。main
函数启动producer
协程,并调用consumer
函数。