cho*_*ovy -2 parallel-processing go go-http
我正在尝试并行进行 http 查询,然后等待所有查询完成:
g1, _ := go http.Get('http://example.com/1')
g2, _ := go http.Get('http://example.com/2')
res1 := g1.wait() or { panic(err) }
res2 := g2.wait() or { panic(err) }
data1 := json.decode(ApiResult, res1.text) or { panic(err) }
data2 := json.decode(ApiResult, res2.text) or { panic(err) }
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
src/main.go:159:11: syntax error: unexpected go, expecting expression
Run Code Online (Sandbox Code Playgroud)
生成 goroutine 的语义go不允许自动捕获返回的变量。实现这一目标的惯用方法是使用 wait 组或 err 组。
例如,类似这样的代码:
var group errgroup.Group
var resp1 *http.Response
group.Go(func() error {
var err error
resp1, err = http.Get('http://example.com/1')
return err
}
var resp2 *http.Response
group.Go(func() error {
var err error
resp2, err = http.Get('http://example.com/2')
return err
}
err := group.Wait()
if err != nil {
...
}
...
Run Code Online (Sandbox Code Playgroud)
注意:resp1&resp2可以安全地读取,group.Wait()因为它们是在函数中设置的。
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |