当一个错误发生时,如何阻止另一个错误?
\n\n我必须使用res1和res2\xef\xbc\x8cin生产res1,res2不是相同的静态类型。
\n\npackage main\n\nimport (\n "fmt"\n "net/http"\n "sync"\n)\n\nfunc main() {\n wg := &sync.WaitGroup{}\n wg.Add(2)\n\n var res1, res2 *http.Response\n var err1, err2 error\n\n go func() {\n defer wg.Done()\n res1, err1 = http.Get("http://127.0.0.1:8899")\n if err1 != nil {\n panic(err1)\n }\n }()\n go func() {\n defer wg.Done()\n res2, err2 = http.Get("http://127.0.0.1:8898")\n if err2 != nil {\n panic(err2)\n }\n }()\n wg.Wait()\n\n fmt.Println(res1, res2)\n}\nRun Code Online (Sandbox Code Playgroud)\n
公共上下文应该能够取消所有等待的请求。像这样的东西:
ctx, cancel:=context.WithCancel(context.Background())
defer cancel()
cli:=http.Client{}
go func() {
req:=http.NewRequestWithContext(ctx,http.MethodGet,url,nil)
respose, err:=cli.Do(req)
if err != nil {
cancel()
return
}
}()
Run Code Online (Sandbox Code Playgroud)
您应该对所有 http 请求使用相同的方法ctx,当一个请求失败时,将其取消。一旦上下文被取消,所有其他 http 请求也应该取消。
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |