Avatar ·

如何在不使用 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?需要一个不硬编码的可靠解决方案。