WaitGroup 参考:使用指针和变量
Go 中的 WaitGroup 提供了用于协调 goroutine 的同步原语。它具有三个主要功能:添加、完成和等待。在这里,我们将研究它们的用法以及为什么可以使用指针和变量来调用它们。
WaitGroup 方法
如上所述,所有 WaitGroup 函数都由指向 WaitGroup 的指针,由 *WaitGroup 接收器类型表示。这允许他们修改 WaitGroup 的内部状态,跟踪 goroutine 完成并等待它们完成。
理解用法
有问题的代码片段显示了两个指针WaitGroup 函数的变量用法:
func main() { // Declared as a variable var wg sync.WaitGroup // Called with a pointer to the WaitGroup wg.Add(1) // Called with a variable (not a pointer) go worker(i, wg) }
将指针传递给Worker
将 WaitGroup 传递给 Worker Goroutine 时,使用 & 传递其地址至关重要。这是因为工作线程的 Done 函数对 WaitGroup 指针进行操作,直接将其作为变量传递会创建副本,从而导致意外行为。
结论
中总之,所有 WaitGroup 方法都设计为使用指针接收器来调用。代码片段中使用变量来简化声明和函数调用。然而,当将 WaitGroup 传递给 goroutine 时,必须传递其地址 (&) 以确保所有方法都在同一底层指针上操作。
以上是为什么在 Go 的 WaitGroup 中使用指针和变量?的详细内容。更多信息请关注PHP中文网其他相关文章!