MST
星途 面试题库

面试题:Go中WaitGroup计数管理基础

在Go语言中,使用WaitGroup时,如果有10个goroutine需要等待,如何正确初始化WaitGroup的计数?并写出一个简单示例展示如何在goroutine结束时减少计数,最后等待所有goroutine完成。
48.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,要正确初始化WaitGroup的计数为10,可以使用Add方法或在声明时直接传入计数。以下是示例代码:

package main

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

func main() {
    var wg sync.WaitGroup
    // 方式一:使用Add方法
    wg.Add(10) 

    // 方式二:声明时直接传入计数
    // var wg sync.WaitGroup = sync.WaitGroup{10}

    for i := 0; i < 10; i++ {
        go func(index int) {
            defer wg.Done() // goroutine结束时减少计数
            fmt.Printf("Goroutine %d is working\n", index)
            time.Sleep(time.Second)
        }(i)
    }

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

上述代码中:

  1. 首先声明了一个WaitGroup变量wg
  2. 通过wg.Add(10)WaitGroup的计数初始化为10。
  3. 在每个启动的goroutine中,使用defer wg.Done()在函数结束时将计数减1。
  4. 最后使用wg.Wait()阻塞主线程,直到所有goroutine完成(即WaitGroup的计数变为0)。