1 回答
TA贡献1794条经验 获得超8个赞
您的消费者应该循环运行,这已经提到过。
更改消费者的第一个参数,使其为 achan string而不是字符串。这样生产者就可以不断地写入这个通道,让消费者在另一个通道上发布,直到时间限制到期。
func consumer(consumeChan chan string, outCh chan string) {
for {
select {
case s := <- consumeChan:
s = strings.ToUpper(s)
outCh <- s
}
}
}
现在在go consumer()调用之前的 main func 中,您正在等待c1生产者对频道的第一个响应。c1而不是将通道作为第一个参数传递。
func main() {
s := []string{"one", "two", "three", "four"}
c1 := make(chan string)
d1 := make(chan string)
go producer(s, c1)
go consumer(c1, d1)
stop := time.After(2000 * time.Millisecond)
for {
select {
case <-stop:
fmt.Println("STOP AFTER 2 SEC!")
return
case response := <- d1:
fmt.Println(response)
time.Sleep(50 * time.Millisecond)
}
}
}
这应该向您展示生产者在通道上连续写入随机数c1,以及消费者在 d1 通道上连续写入所有大写文本,直到 2 秒结束。
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报