Go sync 包

sync 包提供 WaitGroup、Mutex、RWMutex、Once 等基础同步原语,用于在共享状态场景里建立安全协作。

#type / concept #status / growing #tech / dev #resource / go

[!info] related notes

Go sync 包

一句话定义

sync 包是 Go 标准库提供的一组基础同步原语,用来在共享内存场景下协调 goroutine 之间的执行顺序和数据访问。

核心机制 / 工作原理

sync 里最常见的能力包括:

  • WaitGroup:等待一组 goroutine 完成
  • Mutex:独占锁
  • RWMutex:读写锁
  • Once:保证某段初始化逻辑只执行一次

这类原语通常出现在:

  • 多 goroutine 共享状态
  • 无法只靠 channel 把数据流画干净
  • 需要非常直接地表达“先做完再继续”或“这里必须加锁”

最小例子 / 最小场景

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    fmt.Println("work")
}()
wg.Wait()

这个例子体现的是:

  • goroutine 启动很容易
  • 但调用方是否需要等待它完成,是另一件必须显式表达的事

边界与易混淆点

  • sync 不是并发的默认入口,它更像“共享状态场景下的底层工具箱”
  • 锁能解决安全问题,不等于能自动解决结构混乱问题
  • WaitGroup 负责等待,不负责错误传播和取消控制
创建于 2026/6/20 更新于 2026/6/20