package main
import (
"fmt"
)
func square(num int, resultChan chan int) {
result := num * num
resultChan <- result
}
func main() {
numbers := []int{1, 2, 3, 4, 5}
resultChan := make(chan int, len(numbers))
for _, num := range numbers {
go square(num, resultChan)
}
for i := 0; i < len(numbers); i++ {
fmt.Println(<-resultChan)
}
close(resultChan)
}
Goroutine在其中的作用
- 并发执行:Goroutine允许我们并发地执行
square
函数,对于切片中的每个数字,都启动一个新的Goroutine去执行平方运算。这意味着这些运算可以在多个逻辑处理器(可能是多核CPU)上并行执行,大大提高了运算效率,尤其是当数字数量较多时。
- 轻量级:Goroutine非常轻量级,相比传统的线程,创建和销毁Goroutine的开销很小,所以可以轻松创建大量的Goroutine来处理批量任务。
- 异步处理:每个Goroutine独立运行,不会阻塞主线程,主线程可以继续执行其他操作(比如创建更多的Goroutine),而不需要等待某个平方运算完成。通过
channel
来同步和获取每个Goroutine的运算结果。