如何将数据返回给频道的发送者

时间:2015-04-06 02:49:36

标签: http go channel

我是Golang newbiew,我正在尝试实现一个http服务器,该服务器使用通道同步访问超昂贵的计算(SAT)操作。

所以我有这些并发请求进入,他们将数据传递给一个频道,处理goroutine会从频道中获取数据并执行昂贵的操作,但在完成后,将结果返回给发件人的最佳方法是什么,以便发件人可以发送http响应?

1 个答案:

答案 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

RequestResponse可以包含您需要的任何字段。 如果结构很小(如本例所示),请使用chan Response代替chan *ResponseRequest也相同)。