MST
星途 面试题库

面试题:Go语言中WaitGroup的基本使用场景是什么

请简要阐述在Go语言并发编程中,WaitGroup通常会在哪些场景下被使用,并举例说明如何使用WaitGroup等待一组goroutine完成任务。
38.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

WaitGroup使用场景

  1. 多个goroutine并行处理任务:当需要多个goroutine同时执行不同任务,然后等待所有任务完成时,比如多个goroutine分别从不同数据源读取数据,最后汇总处理。
  2. 任务分阶段执行:在一个复杂任务中,先并行执行多个子任务,然后等待这些子任务完成后,再执行后续任务。例如先并行计算多个部分的结果,然后将这些结果合并处理。

示例代码

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    // 设置需要等待的goroutine数量
    wg.Add(3)

    // 启动第一个goroutine
    go func() {
        defer wg.Done()
        fmt.Println("goroutine 1 is running")
    }()

    // 启动第二个goroutine
    go func() {
        defer wg.Done()
        fmt.Println("goroutine 2 is running")
    }()

    // 启动第三个goroutine
    go func() {
        defer wg.Done()
        fmt.Println("goroutine 3 is running")
    }()

    // 等待所有goroutine完成
    wg.Wait()
    fmt.Println("All goroutines have finished")
}

在上述代码中,通过wg.Add(3)设置了需要等待3个goroutine。每个goroutine在结束前调用wg.Done()通知WaitGroup任务已完成。最后通过wg.Wait()阻塞主线程,直到所有goroutine都调用了wg.Done()