如何在不使用 time.Sleep 的情况下等待所有 goroutine 完成?
大家好!我开始学习 Go,遇到了 goroutine 同步的问题。我写了一个简单的程序,启动多个 goroutine 并行处理数据,但无法让主函数等待它们完成。
这是我的代码:
```go
package main
import (
"fmt"
"time"
)
func worker(id int) {
fmt.Printf("Worker %d started\n", id)
time.Sleep(2 * time.Second) // 模拟工作
fmt.Printf("Worker %d finished\n", id)
}
func main() {
for i := 1; i <= 5; i++ {
go worker(i)
}
// 程序立即结束,不等待 goroutine
fmt.Println("Main function ended")
}
```
问题在于程序立即结束,不等待 goroutine 执行。我知道可以使用 `time.Sleep()`,但这是权宜之计——我不知道每个 goroutine 的确切执行时间。而且这不可靠且低效。
如何正确同步 Go 中的 goroutine?需要一个不硬编码的可靠解决方案。