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
相关推荐
北漂燕郊杨哥1 小时前
dsh-desktop:DeepSeek Harness 的本地优先桌面应用
golang·wails·deepseek·deepseekharness
朋克洛德的码农16 小时前
Go并发-sync包四剑客:Mutex、RWMutex、WaitGroup、Once-从入门到原理
开发语言·后端·golang
圣殿骑士-Khtangc16 小时前
Go泛型编程实战从类型约束到泛型数据结构
golang
FfHUCisI18 小时前
Golang - 信号量模式(Semaphore Pattern)
开发语言·后端·golang
报错小能手1 天前
Go 语言结构 基础语法
开发语言·后端·golang
剩下了什么1 天前
go语言 Ctx:「错误三:在 Context 中存储可变值」
开发语言·后端·golang
运维开发笔记1 天前
3.7 Go panic 与 recover 学习笔记
golang
JavaPub-rodert1 天前
我把 OpenAI 协议塞进了 Go 工具库:go-commons 开始支持 AI 了
开发语言·人工智能·golang
圣殿骑士-Khtangc2 天前
Go错误处理最佳实践进阶从error到panic的完整指南
golang