Go-Channel面试精讲从底层结构到select随机性

Go-Channel面试精讲从底层结构到select随机性

文章导语

Channel是Go并发编程的灵魂,也是面试重灾区。从"channel的底层结构"到"select的随机性"到"关闭channel的行为",本文覆盖所有面试核心考点。

一、核心考点清单

  1. hchan结构:buf+sendq+recvq+mutex
  2. 无缓冲vs有缓冲:同步vs异步
  3. 发送操作:先检查recvq→再写buf→最后阻塞
  4. select随机性:pollorder随机打乱,防止饿死
  5. 关闭行为:close→所有recvq收到零值→send panic

二、面试真题

Q: 对nil channel操作会怎样?

A: 发送/接收→永久阻塞;close→panic;select中nil case被忽略。

Q: 对已关闭channel操作?

A: 接收→零值+false;发送→panic;再次close→panic。

Q: select的default作用?

A: 非阻塞操作,所有case不可执行时走default。

三、全文总结

Channel本质上是一个带互斥锁的环形队列+两个等待队列。select的随机性通过pollorder洗牌实现。

参考文献

  1. Go源码 runtime/chan.go
  2. Go Blog - Share Memory By Communicating
相关推荐
利威尔xu10 小时前
2026-11-05-Go内存管理面试
面试·golang
Zenova EdgeOS2 天前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
JavaPub-rodert2 天前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
microrain2 天前
SagooIoT 的数据接入层只有四张表,却能接住三种外部数据
物联网·golang·数据建模·sagooiot
fly-iot2 天前
【FDE知识库】(4):企业知识库怎么选型,开源知识库分享几个,选择开源协议友好的版本,开发wiki-go项目
golang·开源·开源协议
福大大架构师每日一题2 天前
excelize v2.11.1发布:Go 1.26.0起步,16项安全修复与嵌入对象能力全面升级
开发语言·安全·golang
小小龙学IT2 天前
Go 语言 pprof 性能剖析与调优深度解析:把“卡在哪“变成一张可执行的数据图
开发语言·后端·golang
十二同学啊2 天前
Go 工程化详解:项目结构、代码规范、测试体系与 CI/CD 实践
ci/cd·golang·代码规范
利威尔xu3 天前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
利威尔xu3 天前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang