Go Mutex 底层原理

一句话结论 Go sync.Mutex 是CAS + 信号量实现的互斥锁,有正常模式和饥饿模式两种状态。正常模式下等待者自旋+排队,饥饿模式下按 FIFO 直接交接,防止尾端 Goroutine 饿死。 核心原理 底层结构 type Mutex struct { state int32 /


Go Map 底层原理

一句话结论 Go Map 是拉链法的哈希表,由一个 hmap 结构体 + 多个 bmap(bucket)组成。每个 bucket 存 8 个键值对,冲突通过溢出桶解决,扩容采用渐进式搬迁避免一次性停顿。 核心原理 底层结构 hmap { count int // 元素个数


Go Map 并发安全

一句话结论 Go 原生 Map 不支持并发读写——并发读写会触发 fatal error 直接崩溃。并发场景有三种方案:Mutex + map(通用)、sync.Map(读多写少)、分片加锁 Map(高并发写入)。 核心原理 为什么原生 Map 不并发安全 Go 设计者刻意不在 Map 内部加锁——


Go Interface 底层原理

一句话结论 Go 的 interface 是一个双指针结构(类型指针 + 数据指针),分为 eface(空接口 interface{})和 iface(有方法的接口)。接口的 nil 判断需要动态类型和动态值都为 nil。 核心原理 底层结构 eface(空接口 interface{}): ┌─


Go GMP 调度模型

一句话结论 GMP 是 Go 运行时调度器的核心——G(Goroutine)是执行单元,M(OS 线程)是执行者,P(逻辑处理器)是执行所需的资源上下文。P 的数量由 GOMAXPROCS 决定,M 的数量由 Go Runtime 动态管理。 核心原理 G、M、P 分别是什么


Go defer 详解

一句话结论 defer 在函数返回前执行,遵循后进先出(LIFO)栈序。defer 的参数在声明时求值(不是执行时),与 return 的交互由命名返回值决定。 核心原理 执行顺序:LIFO func demo() { defer fmt.Println("1") defer fmt


Go Context 详解

一句话结论 Context 用于在 Goroutine 之间传递取消信号、截止时间和请求范围元数据。不是用来传普通业务参数的。取消是协作式的——Context 只发信号,不能强制终止 Goroutine。 核心原理 Context 接口 type Context interface { De


Go Channel 阻塞、关闭与泄漏

一句话结论 Channel 的阻塞取决于是否有缓冲和对方是否就绪。nil Channel 永久阻塞,已关闭 Channel 写入 panic、读取返回零值。谁写谁关——接收方关闭 Channel 极易 panic。 核心原理 阻塞条件全表


Go Channel 底层原理

Channel 是 Go CSP 并发模型的核心——底层是一个环形队列 + 等待队列 + 互斥锁的结构体 hchan,发送和接收在队列满/空时会让 Goroutine 挂起并排队等待。 核心原理 CSP 模型 Communicating Sequential Processes:不要通过共享内存来通


Go 基础高频问题合集

make 和 new 的区别 一句话: new(T) 分配内存并返回 *T(零值指针),只用于任意类型。make 只用于 slice/map/channel,返回初始化后的 T(不是指针),并完成内部初始化。