1 回答

TA貢獻1794條經(jīng)驗 獲得超8個贊
您的消費者應(yīng)該循環(huán)運行,這已經(jīng)提到過。
更改消費者的第一個參數(shù),使其為 achan string而不是字符串。這樣生產(chǎn)者就可以不斷地寫入這個通道,讓消費者在另一個通道上發(fā)布,直到時間限制到期。
func consumer(consumeChan chan string, outCh chan string) {
for {
select {
case s := <- consumeChan:
s = strings.ToUpper(s)
outCh <- s
}
}
}
現(xiàn)在在go consumer()調(diào)用之前的 main func 中,您正在等待c1生產(chǎn)者對頻道的第一個響應(yīng)。c1而不是將通道作為第一個參數(shù)傳遞。
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)
}
}
}
這應(yīng)該向您展示生產(chǎn)者在通道上連續(xù)寫入隨機數(shù)c1,以及消費者在 d1 通道上連續(xù)寫入所有大寫文本,直到 2 秒結(jié)束。
- 1 回答
- 0 關(guān)注
- 112 瀏覽
添加回答
舉報