术语表
本仓核心术语的中英对照、一句话定义与权威出处。出处均为官方文档、官方博客、语言规范或原论文,逐条可点;未能找到权威出处的条目如实标注。相关页链接指向本仓正文。
并发与运行时
Goroutine(Go 协程)
轻量级执行单元,由 Go 运行时调度而非操作系统线程,初始栈很小、可大量并存。 出处:语言规范 · Go 语句、Effective Go · Goroutines相关页:Goroutine、GoroutineImpl
GMP 调度模型
Go 运行时调度器的抽象:G(goroutine)、M(机器线程)、P(处理器,持有可运行 G 队列)。 出处:官方 · Go 调度器设计文档(golang.org/s/go11sched)相关页:GMP、Runtime
Channel(通道)
带类型的并发安全管道,可在 goroutine 之间收发值;无缓冲通道收发双方同步会合。 出处:语言规范 · 通道类型、Go 内存模型 · 通道、Effective Go · Channels相关页:Chan、ChanImpl
Select
多路等待多个通道操作的控制结构,可就绪的分支中随机选择一个执行。 出处:语言规范 · Select 语句相关页:Select
CSP(通信顺序进程)
Tony Hoare 提出的并发模型,Go 的并发设计哲学来源:「不要通过共享内存来通信,而要通过通信来共享内存」。 出处:Hoare 1978 原论文(CACM,DOI)、CSP 概览 · Wikipedia相关页:CSP、Actor
数据竞争(Data Race)
两个 goroutine 并发访问同一内存位置、至少一个是写、且没有同步协调——行为未定义。 出处:Go 内存模型、官方博客 · Introducing the Go Race Detector相关页:RaceCondition
Go 内存模型(Memory Model)
规定一个 goroutine 能否观察到另一个 goroutine 写入的值,核心是 happens-before 关系。 出处:Go 内存模型相关页:MemoryModel、MemorySynchronization
Happens-before
内存模型中的偏序关系:若 A happens-before B,则 A 的写对 B 可见。 出处:Go 内存模型相关页:MemoryModel
Mutex(互斥锁)
保证同一时刻只有一个 goroutine 进入临界区的锁,sync.Mutex。 出处:sync 标准库相关页:Mutex
RWMutex(读写锁)
允许多读单写的锁,读多写少场景吞吐更高,sync.RWMutex。 出处:sync 标准库相关页:RWMutex
WaitGroup
等待一组 goroutine 结束的计数栅栏,sync.WaitGroup。 出处:sync 标准库相关页:WaitGroup
Atomic(原子操作)
不可分割的底层内存原语,sync/atomic,是无锁算法的基石。 出处:sync/atomic 标准库、Go 内存模型 · 原子相关页:Atomic
临界区(Critical Section)
访问共享资源的代码段,需要互斥保护。 出处:Go 内存模型 · 锁相关页:CriticalSection
Context(上下文)
跨 API 边界传递取消信号、超时与请求范围值的标准载体,context.Context。 出处:context 标准库、官方博客 · Go Concurrency Patterns: Context相关页:Context
errgroup
golang.org/x/sync/errgroup:带错误传播与取消的 goroutine 组管理。 出处:golang.org/x/sync/errgroup相关页:ErrorGroup
Goroutine 泄漏
goroutine 因阻塞在永不到来的通道操作上而无法退出,累积泄漏内存。 出处:官方博客 · Goroutine Leak Profiles相关页:GoroutineImpl、Pprof
Race Detector(竞态检测器)
基于 ThreadSanitizer 的动态竞态检测工具,go test -race。 出处:官方博客 · Introducing the Go Race Detector相关页:RaceCondition、Test
内存与垃圾回收
GC(垃圾回收)
Go 运行时自动回收不可达堆内存的机制;并发、三色标记、低暂停。 出处:官方 · A Guide to the Go Garbage Collector相关页:GC、GC(内存分配篇)
三色标记
GC 可达性分析的抽象:白(未访问)、灰(待扫描)、黑(已扫描)。 出处:官方 GC 指南 · GC 循环相关页:GC
混合写屏障
Go 1.8 起的写屏障策略,把栈重扫需要的时间降到接近零。 出处:官方博客 · Go GC: Prioritizing low latency and simplicity相关页:GC
GOGC
控制 GC 触发时机的环境变量/参数:堆增长百分比。 出处:官方 GC 指南 · GOGC相关页:Practice
GOMEMLIMIT
堆内存软上限,GOMEMLIMIT 环境变量,防内存失控。 出处:官方 GC 指南 · Memory limit相关页:Practice
逃逸分析(Escape Analysis)
编译器判定对象分配在栈还是堆的分析;逃逸的对象由 GC 管理。 出处:官方 GC 指南 · 逃逸分析、官方博客 · Allocating on the Stack相关页:Segment、Alloc
零值(Zero Value)
变量声明后未显式赋值时的默认值,Go 保证变量总有确定初值。 出处:语言规范 · 零值相关页:VarAndInit
nil
预定义标识符:指针、通道、映射、切片、接口、函数类型的零值。 出处:语言规范 · 预定义标识符相关页:Nil
类型系统
Slice(切片)
对底层数组的抽象:指针 + 长度 + 容量,可动态增长。 出处:语言规范 · 切片类型、官方博客 · Go Slices: usage and internals相关页:Slice
Append 扩容
append 在容量不足时分配更大的底层数组并迁移元素。 出处:官方博客 · append 的机制相关页:Slice
Map(映射)
哈希表实现的键值容器,遍历顺序故意随机化,map[K]V。 出处:语言规范 · 映射类型、官方博客 · Go maps in action相关页:Map
Interface(接口)
方法签名的集合;Go 的隐式实现(结构化类型)不同于其他语言的名义实现。 出处:语言规范 · 接口类型、Effective Go · Interfaces相关页:Interface、Interface(OOP 篇)
方法集(Method Set)
类型关联的方法集合,决定接口满足关系;值接收者与指针接收者的方法集不同。 出处:语言规范 · 方法集相关页:PointerReceiver
类型断言(Type Assertion)
从接口值取出其动态类型的具体值,x.(T),可带 comma-ok 形式。 出处:语言规范 · 类型断言相关页:Assertion、TypeAssertion
类型开关(Type Switch)
对接口动态类型做多路分派的 switch x.(type)。 出处:语言规范 · 类型开关相关页:Switch
反射(Reflection)
运行时检视类型与值的能力,reflect 包;官方用「三定律」阐述。 出处:官方博客 · The Laws of Reflection、reflect 标准库相关页:Reflection
泛型(Generics)
类型参数化,Go 1.18 起;函数与类型可带类型参数与约束。 出处:官方博客 · An Introduction To Generics、语言规范 · 类型参数声明相关页:Generics
约束(Constraint)
类型参数必须满足的接口型条件,可用近似元素(~T)与联合(A|B)表达。 出处:官方博客 · When To Use Generics相关页:Constraints
类型推断(Type Inference)
编译器从实参推导类型参数的机制,泛型语法糖的核心。 出处:官方博客 · Type Inference相关页:TypeInference
嵌入(Embedding)
命名类型不带字段名地写入结构体/接口,获得转发与组合,Go 的「继承替代」。 出处:Effective Go · Embedding相关页:Embedding
闭包(Closure)
引用外层变量的函数字面量,func 表达式即函数值。 出处:语言规范 · 函数字面量相关页:AnonymousFunc
变参(Variadic Parameter)
参数列表末尾的 ...T 参数,调用方可传任意个数实参。 出处:语言规范 · 函数类型(变参)相关页:VariadicParameters
Iota
常量声明中的自增计数器,配合常量表达式生成枚举。 出处:语言规范 · Iota、官方博客 · Constants相关页:Iota
无类型常量(Untyped Constant)
不受具体类型约束的常量,精度无限,可隐式适配多种类型。 出处:官方博客 · Constants相关页:Cant
结构体标签(Struct Tag)
结构体字段上的元数据字符串,编码/解码与映射的约定载体。 出处:encoding/json 标准库 · 标签约定、官方博客 · JSON and Go相关页:StructTags
错误处理
Error(错误)
error 内建接口:非 nil 即出错;Go 的错误是值,显式检查。 出处:语言规范 · Errors、官方博客 · Error handling and Go相关页:Error
错误包装(Error Wrapping)
fmt.Errorf 的 %w 动词与 errors.Is/As/Unwrap 链式检查。 出处:errors 标准库相关页:Errors
Defer
延迟到函数返回前执行的调用,栈式 LIFO,常配资源释放。 出处:语言规范 · Defer 语句、官方博客 · Defer, Panic, and Recover相关页:Defer
Panic / Recover
不可恢复错误的中断机制与捕获机制,成对出现于延迟调用中。 出处:官方博客 · Defer, Panic, and Recover、Effective Go · Recover相关页:PanicAndRecover
工程化
Module(模块)
带版本号的包集合,go.mod 声明路径与依赖,Go 的依赖单元。 出处:官方 · Go Modules 使用指南、Go Modules Reference相关页:Mod
go.mod
模块根目录的声明文件:模块路径、Go 版本、require/exclude/retract。 出处:Go Modules Reference相关页:Init
最小版本选择(MVS)
Go 的依赖解析算法:为每个依赖选出满足所有需求的最小(最保守)版本。 出处:Go Modules Reference · 最小版本选择相关页:Mod
Workspace(工作区)
go.work 聚合多个本地模块协同开发,无需改 go.mod。 出处:官方教程 · 多模块工作区相关页:Work
工具链(Toolchain)
go 命令、编译器、标准库与相关工具的整体;支持多版本安装与自动切换。 出处:官方 · 安装与管理 Go 工具链相关页:Env、Install
Pprof
运行时性能剖析工具集:CPU、堆、goroutine、锁、trace。 出处:runtime/pprof 标准库、官方博客 · Profiling Go Programs相关页:Pprof
PGO(按配置优化)
用生产 profile 反哺编译器内联与布局决策的优化,Go 1.21 起。 出处:官方 · Profile-guided optimization、官方博客 · PGO in Go 1.21相关页:PGO
Fuzzing(模糊测试)
覆盖率引导的随机化测试,FuzzXxx(*testing.F),Go 1.18 起内建。 出处:官方 · Fuzzing相关页:Fuzz
死锁(Deadlock)
多个执行流互相等待对方持有的资源而永久阻塞。未找到官方单页权威出处(待核),运行时对全部 goroutine 均不可调度时会以 fatal error: all goroutines are asleep 报告;相关标准库口径见 sync 标准库。 相关页:CriticalSection、Chan
算法与数据结构
动态数组
容量按需倍增的变长数组,Go 切片即其工程化形态。 出处:动态数组 · Wikipedia、官方博客 · Go Slices相关页:DynamicArray
哈希表
平均 O(1) 的键值容器,冲突处理决定性能形态。 出处:哈希表 · Wikipedia相关页:Hash、Map
红黑树
自平衡二叉搜索树,插入/删除/查找 O(log n),Go map 的底层结构之一。 出处:红黑树 · Wikipedia相关页:RedBlackTree
跳表(Skip List)
多级链表实现的对数查找结构,Redis 有序集合的底层实现。 出处:跳表 · Wikipedia相关页:SkipList
维护口径:新增条目必须给出可点的权威出处(官方文档/规范/官方博客/原论文/标准库);查不到就写「未找到权威出处(待核)」,不得凭印象编造链接。
相关页面
- DynamicArray
- Hash
- SkipList
- RedBlackTree
- Alloc
- GC
- Practice
- Actor
- CSP
- Chan
- ChanImpl
- ErrorGroup
- GMP
- Goroutine
- GoroutineImpl
- Select
- WaitGroup
- Cant
- Iota
- Nil
- PGO
- Pprof
- Env
- Install
- Error
- Errors
- PanicAndRecover
- AnonymousFunc
- Defer
- VariadicParameters
- GC
- MemoryModel
- Constraints
- Generics
- StructTags
- knowledge
- Init
- Mod
- Work
- Embedding
- Interface
- PointerReceiver
- TypeAssertion
- Reflection
- Atomic
- Context
- CriticalSection
- MemorySynchronization
- Mutex
- RWMutex
- RaceCondition
- Runtime
- Fuzz
- Test
- Assertion
- Interface
- Map
- Slice
- Switch
- TypeInference
- Segment
- VarAndInit