MST

星途 面试题库

面试题:Go中WaitGroup在简单任务编排里的使用

假设有10个独立的任务需要并发执行,每个任务简单打印出自己的任务编号。请使用Go的WaitGroup实现该功能,展示代码实现并简要说明WaitGroup的关键方法在此场景中的作用。
18.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    for i := 1; i <= 10; i++ {
        wg.Add(1)
        go func(taskNum int) {
            defer wg.Done()
            fmt.Printf("任务编号: %d\n", taskNum)
        }(i)
    }
    wg.Wait()
}

WaitGroup关键方法作用

  1. wg.Add(delta int):此方法用于向WaitGroup计数器添加指定数量(delta)的值。在上述代码中,每次启动一个新的goroutine前,使用wg.Add(1)将计数器加1,代表新增了一个需要等待完成的任务。
  2. wg.Done():该方法等价于wg.Add(-1),用于将WaitGroup计数器减1。在每个goroutine的函数体中使用defer wg.Done(),意味着当该goroutine结束时,计数器会相应减少,表示该任务已完成。
  3. wg.Wait():此方法会阻塞当前goroutine,直到WaitGroup的计数器归零。在主函数中,wg.Wait()确保主goroutine等待所有10个并发任务完成后再退出,避免程序提前结束而部分任务未执行完。