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
相关推荐
名字还没想好☜4 小时前
Go 标准库 flag 包实战:参数解析、子命令、自定义 Value 类型与默认值
开发语言·后端·golang·go
zh73146 小时前
Go 1.23 → 1.26 升级检查文档
开发语言·chrome·golang
平头哥AI1 天前
Day 01 | go run 跑通第一个 Go 程序,go build 留下一个能拷走的 exe
开发语言·后端·golang
2601_962296511 天前
如何使用Golang包路径_管理本地和远程模块引用
golang·数据转换·变量定义·常用库·编程语言区别
FfHUCisI1 天前
GMP 调度器:Go 并发的心脏是如何跳动的
开发语言·golang·php
我不会起名字3221 天前
一天一道算法题(26):栈的简单应用
java·数据结构·python·算法·leetcode·golang·
gsls2008081 天前
告别 Vault 的复杂度:用 Go 标准库给 Windows 凭据管理器装上 MCP
windows·golang·mcp
名字还没想好☜1 天前
Go 时间格式化为什么用 2006-01-02:time.Format/Parse 的参考时间、时区与解析踩坑
开发语言·后端·golang·go
FfHUCisI2 天前
Golang Map 哈希表实现
golang·哈希算法·散列表
源代码•宸2 天前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang