我对 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)
所以,你的问题是双重的。首先,错误的原因是因为如果您查看此处的文档,您会看到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)
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |