下面是Go Goroutine(协程 ) 和 Channel 的简单例子
package main
import (
"fmt"
"time"
)
// worker 函数是一个工作协程,它接收一个工作任务列表和结果列表
// id表示工作协程的编号,jobs表示工作任务列表,results表示结果列表
func worker(id int, jobs <-chan int, results chan<- int) {
// 循环遍历从jobs中读取到的任务
for job := range jobs {
fmt.Printf("工作协程%d正在处理任务%d\n", id, job)
time.Sleep(time.Second) // 模拟工作耗时
results <- job * 2 // 将结果写入results列表
}
}
func main() {
jobs := make(chan int, 100) // 创建一个可以存储100个整数的工作任务列表
results := make(chan int, 100) // 创建一个可以存储100个整数的结果列表
// 创建三个工作协程
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
// 向工作任务列表中写入5个任务
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs) // 关闭工作任务列表
// 从结果列表中读取5个结果并输出
for a := 1; a <= 5; a++ {
result := <-results
fmt.Println("结果:", result)
}
}