golang经典题 附加答案
以下是针对Golang经典题目的附加解法,使用了sync.WaitGroup
来确保主程序在所有goroutines完成之前不会退出。
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
results := make([]int, 5)
for i := range results {
wg.Add(1)
go func(index int) {
defer wg.Done()
results[index] = fib(index)
}(i)
}
wg.Wait()
for _, result := range results {
fmt.Println(result)
}
}
func fib(n int) int {
if n <= 1 {
return n
}
return fib(n-1) + fib(n-2)
}
这段代码中,我们使用了sync.WaitGroup
的Add
方法来增加等待的goroutines数量,在每个goroutine完成后使用Done
方法来通知。wg.Wait()
会阻塞主程序,直到所有的goroutines完成。这样可以确保计算结果的正确输出。
评论已关闭