实现思路
- 创建一个任务通道,用于发送需要平方运算的整数。
- 创建多个Goroutine,每个Goroutine从任务通道中接收任务并进行平方运算,将结果发送到结果通道。
- 创建一个结果通道,用于接收各个Goroutine计算出的平方结果。
- 主Goroutine向任务通道发送所有任务,然后从结果通道收集所有结果。
核心代码片段
package main
import (
"fmt"
)
func worker(tasks <-chan int, results chan<- int) {
for num := range tasks {
results <- num * num
}
close(results)
}
func main() {
tasks := make(chan int)
results := make(chan int)
numWorkers := 3
for i := 0; i < numWorkers; i++ {
go worker(tasks, results)
}
numbers := []int{1, 2, 3, 4, 5}
for _, num := range numbers {
tasks <- num
}
close(tasks)
finalResults := []int{}
for i := 0; i < len(numbers); i++ {
finalResults = append(finalResults, <-results)
}
close(results)
fmt.Println(finalResults)
}