MST
星途 面试题库

面试题:Go语言中WaitGroup在并发任务计数场景的应用

假设有一个Go程序,需要并发执行10个任务,每个任务模拟一个耗时的操作(例如睡眠1秒),最后等待所有任务完成后输出任务执行完成的消息。请使用WaitGroup实现这个功能,并解释WaitGroup的关键方法在这个场景中的作用。
42.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    var wg sync.WaitGroup
    wg.Add(10)

    for i := 0; i < 10; i++ {
        go func(id int) {
            defer wg.Done()
            fmt.Printf("Task %d started\n", id)
            time.Sleep(1 * time.Second)
            fmt.Printf("Task %d completed\n", id)
        }(i)
    }

    wg.Wait()
    fmt.Println("All tasks completed")
}

WaitGroup关键方法在场景中的作用

  1. wg.Add(n):用于向WaitGroup添加需要等待的任务数量,这里wg.Add(10)表示有10个任务需要等待完成。
  2. wg.Done():每个任务完成时调用此方法,通知WaitGroup该任务已完成。在上面代码中,defer wg.Done()确保即使任务内部发生错误或提前返回,也能正确通知WaitGroup任务已结束。
  3. wg.Wait():调用此方法会阻塞当前goroutine,直到所有添加到WaitGroup的任务都调用了wg.Done(),即所有任务都完成,程序才会继续执行wg.Wait()之后的代码。