详解Go语言中的Goroutine组(Group)在项目中的使用
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // 确保Signal Group当此函数完成时
fmt.Printf("Worker %d starting\n", id)
time.Sleep(time.Second)
fmt.Printf("Worker %d done\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // 将等待组的计数器增加1
go worker(i, &wg) // 创建goroutine执行worker函数
}
wg.Wait() // 等待所有goroutine完成
}
这段代码创建了一个worker函数,该函数以一个整数ID和一个*sync.WaitGroup为参数。在main函数中,我们创建了一个for循环,每次循环都创建一个goroutine运行worker函数,并将wg的计数器增加1。最后,我们调用wg.Wait(),这会阻塞直到wg的计数器降为0,即所有goroutine完成。这是一个在实际项目中管理并发goroutines的简单例子。
评论已关闭