首页 >后端开发 >Golang >为什么在 Go 的 WaitGroup 中使用指针和变量?

为什么在 Go 的 WaitGroup 中使用指针和变量?

Linda Hamilton
Linda Hamilton原创
2024-12-01 00:43:10432浏览

Why Use Pointers and Variables with Go's WaitGroup?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn