面试真题

Go · 中等 · 大华股份

如果chan 在有缓冲区的情况下缓冲区满了不想要后续的数据了怎么做

中等 Go 🎤 大华股份
参考答案
使用select配合default实现非阻塞发送丢弃数据,或关闭channel停止接收。核心要点:缓冲满时普通发送会阻塞;用select{ case ch<-data: default: // 丢弃 }可在满时走default不阻塞;也可用select+time.After超时丢弃;若确定不再需要,可由接收方关闭channel,发送方通过v,ok:=<-ch判断避免panic。原理:channel缓冲区满时发送操作阻塞,select的default提供非阻塞路径。示例:for{ select{ case ch<-x: default: // 丢弃x } }。注意:丢弃数据需业务允许,否则应考虑限流或扩容缓冲。
题目整理自公开面经,答案由校招宝自研生成,仅供参考