用途:在编写 Go 并发代码时提供规范与模式参考,涉及 goroutine、channel、select、sync 原语和 WaitGroup 等场景。核心原则是“不要通过共享内存来通信,而要通过通信来共享内存”,即通过 channel 传递数据所有权,同一时刻只有一个 goroutine 访问某个值,从设计上避免数据竞争。
主要能力:介绍 goroutine 的启动方式(go 关键字、匿名闭包)及其特性(初始栈约 2KB、由运行时复用到 OS 线程、无返回值、无句柄不可外部终止);channel 的无缓冲与有缓冲区别、方向限定(chan<-、<-chan)、range 遍历与关闭规则(仅发送方关闭、关闭即广播、接收返回零值需用 comma-ok);select 的随机选择、default 非阻塞、time.After 超时与 nil channel 永久阻塞;常见模式包括信号量限流、工作池、fan-out/fan-in、资源池(leaky buffer)、done channel 与 context 取消;sync 原语涵盖 Mutex、RWMutex、WaitGroup、Once、Map、Pool 的适用场景;context 使用规则(始终作为第一个参数、不存入结构体、不使用自定义类型、main 中用 Background、HTTP handler 用 req.Context()、始终向下传递);以及优先编写同步函数、由调用方决定是否并发、按 CPU 数并行化等建议。
使用方式:资料以代码片段展示各模式写法,例如信号量用 make(chan struct{}, MaxConcurrent) 获取与释放,工作池用 jobs/results channel 配合 worker 循环,fan-in 用 WaitGroup 合并多个 channel 后关闭。
适用场景:需要并发处理任务、限制并发度、超时与取消控制、等待一组 goroutine 完成、复用临时对象降低 GC 压力的 Go 程序。
限制:资料未提供安装命令、版本要求、平台信息或收费说明;内容为编码规范与模式参考,不构成可直接运行的完整程序。