面试真题

Go · 中等 · Momenta

生产者、消费者用有缓存channel通信场景,如何让生产者和消费者退出

中等 Go 🎤 Momenta
参考答案
结论:通过关闭channel或context取消信号协调退出。要点:单生产者时生产完关闭channel,消费者用for v:=range ch读至关闭后退出;多生产者需用WaitGroup等待全部完成再由独立协程关闭;需主动停止时用context.Context,生产消费协程监听ctx.Done()后停止收发;严禁向已关闭channel发送否则panic;消费者可通过ok判断通道状态。原理:Go中关闭channel后读操作立即返回零值与false,利用该语义实现安全广播退出。
题目整理自公开面经,答案由校招宝自研生成,仅供参考