gpt4 book ai didi

go - 如何在生产者/消费者场景中得到消费者的响应?

转载 作者:IT王子 更新时间:2023-10-29 02:17:41 25 4
gpt4 key购买 nike

我一直在尝试使用 channel 来构建某种生产者/消费者。我有一个 requests channel ,许多生产者在其中推送请求,然后我有一个处理请求的 processRequests

package main

var requests chan string

func processRequests() {
for {
request <- requests
// Process request...
// And return response - how?
}
}

func main() {
requests = make(chan string)

go processRequests()

requests <- "doSomething"
requests <- "doSomethingElse"
requests <- "etc"

select {} // Block forever
}

我想知道的是,一旦请求得到满足,将响应发送回生产者(以及正确的响应,因为有多个)的最佳方式是什么?基本上如何使它成为双向 channel ?

知道怎么做吗?

最佳答案

你真的应该使用两个 channel 。试图让它与一个 channel 一起工作会很困惑。

有一个 Google Sites关于可能有用的生产者/消费者模式。

为了让生产者知道消费者正在响应什么,您可以使用响应结构:

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
}

关于go - 如何在生产者/消费者场景中得到消费者的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com