我是Golang newbiew,我正在尝试实现一个http服务器,该服务器使用通道同步访问超昂贵的计算(SAT)操作。
所以我有这些并发请求进入,他们将数据传递给一个频道,处理goroutine会从频道中获取数据并执行昂贵的操作,但在完成后,将结果返回给发件人的最佳方法是什么,以便发件人可以发送http响应?
答案 0 :(得分:1)
同样请参阅this answer。
频道是Go中的头等类型, 您可以在请求中包含“响应”通道。 例如。类似的东西:
type Request struct {
Input int
RespC chan *Responce
}
type Response struct {
Result int
Err error
}
服务:
for req := range ReqC {
// start go routine or whatever
req.RespC <- &Result{Err: errors.New("not implemented")}
}
请求者:
c := make(chan *Response)
ReqC <- &Request{Input: 42, RespC: c}
res := <-c
// check res.Err, use res.Result
Request
和Response
可以包含您需要的任何字段。
如果结构很小(如本例所示),请使用chan Response
代替chan *Response
(Request
也相同)。