1 回答

TA貢獻1911條經(jīng)驗 獲得超7個贊
你真的應(yīng)該使用兩個通道。試圖讓它與一個通道一起工作會很麻煩。
生產(chǎn)者/消費者模式上有一個可能有用的Google 站點。
為了讓生產(chǎn)者知道消費者正在響應(yīng)什么,您可以使用一個結(jié)構(gòu)作為響應(yīng):
type responseMessage struct {
Request string
Response string
}
var requests chan string
var responses chan *responseMessage
func processRequests() {
for {
request <- requests
// Process request...
responses <- &responseMessage{request, "some response string"}
}
}
func processResponses() {
someResponseMessage := <- responses
if someResponseMessage.Request == "doSomething" {
// do something!
}
}
func main() {
requests = make(chan string)
responses = make(chan *responseMessage)
go processRequests()
go processResponses()
requests <- "doSomething"
requests <- "doSomethingElse"
requests <- "etc"
select {} // Block forever
}
- 1 回答
- 0 關(guān)注
- 245 瀏覽
添加回答
舉報