实现思路
- 任务封装:将每个任务(如计算斐波那契数列某一项的值)封装成一个函数。
- 使用goroutine:利用Go语言的goroutine来并发执行这些任务,每个任务对应一个goroutine。
- 使用channel:通过channel来传递任务结果,使得主线程可以从channel中获取每个任务的执行结果。
- 等待所有任务完成:使用
sync.WaitGroup
来等待所有goroutine完成任务,确保在获取所有结果之前程序不会提前退出。
代码框架
package main
import (
"fmt"
"sync"
)
// 计算斐波那契数列的函数
func fibonacci(n int) int {
if n <= 1 {
return n
}
return fibonacci(n - 1) + fibonacci(n - 2)
}
func main() {
// 定义任务列表
tasks := []int{3, 5, 7}
var wg sync.WaitGroup
resultChan := make(chan int)
// 启动goroutine执行任务
for _, task := range tasks {
wg.Add(1)
go func(n int) {
defer wg.Done()
result := fibonacci(n)
resultChan <- result
}(task)
}
// 另起一个goroutine来等待所有任务完成后关闭channel
go func() {
wg.Wait()
close(resultChan)
}()
// 获取任务执行结果
for result := range resultChan {
fmt.Println("Result:", result)
}
}