防止 main() 函数在 Golang 中的 goroutines 完成之前终止?
在Go语言中,可以使用WaitGroup来确保main()函数在所有goroutine完成之前不会终止。WaitGroup是一个计数器,可以用来追踪并等待一组并发操作的完成。
以下是一个示例代码,展示如何使用WaitGroup:
package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup // 设置等待的goroutine数量 wg.Add(2) go func() { defer wg.Done() // 执行第一个goroutine的任务 fmt.Println("Goroutine 1") }() go func() { defer wg.Done() // 执行第二个goroutine的任务 fmt.Println("Goroutine 2") }() // 等待所有goroutine完成 wg.Wait() // 所有goroutine都已完成 fmt.Println("All goroutines finished") }
在上面的示例中,我们创建了两个匿名函数作为goroutine,并在每个goroutine的末尾调用wg.Done()
来标记该goroutine已完成。然后,通过调用wg.Wait()
来等待所有的goroutine完成。只有当所有的goroutine都调用了wg.Done()
后,wg.Wait()
才会返回,main()函数才会终止。
通过使用WaitGroup,我们可以确保main()函数在所有goroutine完成之前不会终止,从而保证了并发操作的正确执行。