dongshou1991 2015-04-06 02:49
浏览 28
已采纳

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

I am a Golang newbiew, and I am trying to implement an http server that synchronizes access to an ultra expensive computational (SAT) operation using a channel.

So I'd have these concurrent requests coming in, they'd pass their data to a channel, and a processing goroutine would pick up the data from the channel and perform the expensive operation, but after its done, what is the best way to return the result to the sender so the sender can send the http response?

  • 写回答

1条回答 默认 最新

  • douhanshu5517 2015-04-06 06:08
    关注

    See this answer as well.

    Channels are first class types in Go, you can just include a "response" channel in the request itself. E.g. something like:

    type Request struct {
        Input int
        RespC chan *Responce
    }
    
    type Response struct {
        Result int
        Err    error
    }
    

    Service:

    for req := range ReqC {
        // start go routine or whatever
        req.RespC <- &Result{Err: errors.New("not implemented")}
    }
    

    Requester:

    c := make(chan *Response)
    ReqC <- &Request{Input: 42, RespC: c}
    res := <-c
    // check res.Err, use res.Result
    

    Where Request and Response can contain whatever fields you need. If the structs are small (like this example) use chan Response instead of chan *Response (and the same for Request).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题