面试题答案
一键面试在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")
}
上述代码中:
- 首先声明了一个
WaitGroup
变量wg
。 - 通过
wg.Add(10)
将WaitGroup
的计数初始化为10。 - 在每个启动的goroutine中,使用
defer wg.Done()
在函数结束时将计数减1。 - 最后使用
wg.Wait()
阻塞主线程,直到所有goroutine完成(即WaitGroup
的计数变为0)。