从处理程序函数返回响应

问题描述 投票:0回答:1

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

所以我给了返回类型作为结构的详细信息,但是它引发了错误

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

错误:

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

Handler Func:

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



}
go goroutine
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.