Go语言生产者和消费者模式

Go语言使用chan实现生产者和消费者代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import "fmt"

// 消费者
func consumer(data chan int, done chan bool) {
// 接收数据,直到通道被关闭
for v := range data {
fmt.Println("recv:", v)
}
// 通知main消费结束
done <- true
}

// 生产者
func producer(data chan int) {
for i := 0; i < 4; i++ {
// 发送数据
data <- i
}
// 生产结束,关闭通道
close(data)
}

func main() {
done := make(chan bool) // 用于接收消费者结束信号
data := make(chan int) // 数据管道
go consumer(data, done) // 启动消费者
go producer(data) // 启动生产者
<-done // 阻塞,直到消费者发回结束信号
}
1
2
3
4
recv: 0
recv: 1
recv: 2
recv: 3