go - 如何进行并行 http.Get 查询
问题描述
我正在尝试并行进行 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) }
我收到以下错误:
src/main.go:159:11: syntax error: unexpected go, expecting expression
解决方案
生成 goroutine 的语义go
不允许自动捕获返回的变量。实现这一点的惯用方法是使用等待组或错误组。
例如,类似这样的代码:
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 {
...
}
...
注意:resp1
&resp2
之后可以安全地读取,group.Wait()
因为它们是在函数中设置的。
推荐阅读
- typescript - 将 mixin 声明为类型而不是变量
- r - 使用 pheatmap 在 r 中重塑热图的问题
- postgresql - 一对多关系的外键
- reactjs - WebRTC 视频流在 Firefox 中工作,但在 chrome 中不工作
- flutter - 动画从左到右水平,但我想要垂直(从上到下)
- mongodb - Mongodb 没有从 4.2 正确更新到 4.4
- python - mysql.connector.errors.InterfaceError:没有要从中获取的结果集
- django - Django:如何在 model.py 页面上获取用户 ID 并动态设置默认值
- javascript - 使用 onMouseMove() 时,ReactJS 中的自定义、可拖动组件太慢
- java - Spring Cloud Stream Function 支持不起作用