我对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
}
因此,您的问题有两个。首先,导致该错误的原因是因为如果您查看文档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)