首页 > 文章列表 > 防止 main() 函数在 Golang 中的 goroutines 完成之前终止?

防止 main() 函数在 Golang 中的 goroutines 完成之前终止?

golang
221 2023-06-27

问题内容

防止 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完成之前不会终止,从而保证了并发操作的正确执行。