Go语言借助于goroutine和channel可以非常方便的处理并发任务。
package main import "fmt" import "time" // go goroutine func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Println("worker", id, "started job", j) time.Sleep(time.Second) fmt.Println("worker", id, "finished job", j) results <- j } } func main() { // 定义两个channel,相当于队列 // jobs接收请求 // results输出响应结果 jobs := make(chan int, 100) results := make(chan int, 100) // 创建workpool,大小为3,可以理解成线程池 for w := 1; w <= 3; w++ { go worker(w, jobs, results) } // 发送任务 for j := 1; j <= 5; j++ { jobs <- j } close(jobs) // 得到结果 for a := 1; a <= 5; a++ { <-results } }