从 Handler Func 返回响应

min*_*bro 0 go goroutine

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

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

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

错误:

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

处理函数:

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



}
Run Code Online (Sandbox Code Playgroud)

Mik*_*key 6

所以,你的问题是双重的。首先,错误的原因是因为如果您查看此处的文档您会看到http.HandleFunc具有以下定义。

func HandleFunc(pattern string, handler func(ResponseWriter, *Request))
Run Code Online (Sandbox Code Playgroud)

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

所以离开你问题的另一部分;

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

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

不完全确定你想如何显示你的结果,但你可以很容易地用 JSON 来完成。

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