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
相关推荐
ttwuai5 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin
codeejun5 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
Achou.Wang5 天前
k8s中nginx worker process自动设置
后端·golang
指尖的爷6 天前
ARM 架构 Ubuntu(RK3588/aarch64)go开发环境安装手册
ubuntu·架构·golang
名字还没想好☜6 天前
Go 实现指数退避重试:context 取消、抖动 jitter 与什么时候别重试
后端·golang·go
Casbin开源社区6 天前
OpenAgent 详解:单二进制自托管 AI Agent 平台,30+ 模型接入、RAG 知识库、MCP 工具调用与 Casbin 工具权限
人工智能·golang·开源
五彩小白7 天前
GO语言装饰器语法
golang
金金计较.7 天前
Go语言-4
开发语言·golang
名字还没想好☜8 天前
Go context.AfterFunc 实战(Go 1.21):context 一取消就自动跑清理,告别手写 goroutine 监听 Done
后端·golang·go
web守墓人8 天前
【goed/ui】自定义组件设计思想篇
linux·windows·ui·golang