豆包AI编程
智能代码生成与优化,高效提升开发速度与质量!
waitgroup 是 go 中一种用于协调 goroutine 执行的同步机制。使用它可以确保主 goroutine 等待一组 goroutine 完成后再继续执行。具体用法:创建 waitgroup 实例,并为它设置一个初始计数器,表示要等待的 goroutine 数。对于每个要等待的 goroutine,调用 wg.add(1) 来增加计数器。在 goroutine 完成后,调用 wg.done() 来减少计数器。最后,主 goroutine 调用 wg.wait() 来阻塞自身,直到所有 goroutine 都已完成。
如何使用 WaitGroup 在 Go 中等待 Goroutine 完成
Go 中的 WaitGroup
是一种同步机制,用于协调多个 goroutine 的执行。它允许主 goroutine 等待一组 goroutine 完成,从而确保在继续执行之前所有相关任务都已完成。
用法:
创建一个 WaitGroup
实例,并为其设置一个初始计数器,表示要等待的 goroutine 数。对于每个要等待的 goroutine,调用 wg.Add(1)
来增加计数器,并在 goroutine 完成后调用 wg.Done()
来减少计数器。最后,主 goroutine 调用 wg.Wait()
来阻塞自身,直到所有 goroutine 都已完成。
代码示例:
package main import ( "fmt" "sync" ) var wg sync.WaitGroup func main() { // 创建一个需要等待 3 个 goroutine 完成的 WaitGroup wg.Add(3) // 创建 3 个 goroutine for i := 0; i <p><strong>实战案例:</strong></p><p>此代码示例模拟了一个简单的 Web 服务器,该服务器会启动多个 goroutine 来处理请求。为了确保在关闭服务器之前 goroutine 已完成,我们使用 <code>WaitGroup</code> 来等待所有 goroutine 完成。</p><pre class="brush:go;toolbar:false;">package main import ( "fmt" "net/http" "sync" ) var wg sync.WaitGroup func main() { // 创建一个需要等待所有 HTTP 请求完成的 WaitGroup wg.Add(10) // 监听端口 8080 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") // 请求处理完毕后,通知 WaitGroup wg.Done() }) http.ListenAndServe(":8080", nil) // 等待所有 HTTP 请求完成 wg.Wait() fmt.Println("All HTTP requests have been processed") }
golang免费学习笔记(深入):立即学习
在学习笔记中,你将探索golang的核心概念和高级技巧!
已抢7325个
抢已抢95407个
抢已抢14926个
抢已抢52642个
抢已抢195813个
抢已抢87478个
抢