【问题标题】:Return response from a Handler Func从 Handler Func 返回响应
【发布时间】:2020-05-19 00:20:41
【问题描述】:

我对 golang 还很陌生,在其中一个处理函数中,我使用来自不同 goroutine 的通道收集数据,现在想将结果数组作为响应对象返回

所以我给出了一个返回类型作为结构详细信息,但它抛出了一个错误

如果这不是将结构切片作为响应返回的方式,那么我如何返回我的结果数组作为响应以发布我的请求

错误:

cannot use homePage (type func(http.ResponseWriter, *http.Request) []details) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc

处理函数:

func homePage(w http.ResponseWriter, r *http.Request) []details{    

    var wg sync.WaitGroup    


    for _, url := range urls {  
        out, err := json.Marshal(url)
        if err != nil {
            panic (err)
        }        
        wg.Add(1)
        go do_calc(ch,client,string(out),&wg)        
    }

    fmt.Println("Returning Response")  
    go func() {
        for v := range ch {
            results = append(results, v)
        }
    }()
    wg.Wait()
    close(ch)  

    return results



}

【问题讨论】:

  • http.HandleFunc 不期望任何返回值,错误的原因是您的[]details。你可以在这里看到它的文档:golang.org/pkg/net/http/#HandleFunc
  • 即使我删除了返回值 [details] 它也会抛出错误太多参数返回有([]details)

标签: go goroutine


【解决方案1】:

所以,您的问题有两个方面。首先,错误的原因是因为如果您查看文档here,您可以看到http.HandleFunc 具有以下定义。

func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

由于您的函数返回 []details,因此不符合要求。

所以,你的问题的另一部分;

如果这不是将结构切片作为响应返回的方式,那么我如何返回我的结果数组作为响应以发布我的请求

为了解决您的问题,我们需要将您的数据写回响应中,您会注意到在传递给您的 HandleFunc 的参数中,您有一个 ResponseWriter,您可以在其中使用 Write() 方法返回您的回应

不完全确定您希望如何显示结果,但您可以使用 JSON 轻松完成。

b, err := json.Marshal(results)
if err != nil {
    // Handle Error
}
w.Write(b)

【讨论】:

    猜你喜欢
    • 2019-03-20
    • 2020-10-13
    • 1970-01-01
    • 2015-10-20
    • 2015-02-26
    • 2011-11-17
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多