发生错误时如何停止 goroutine

0 go goroutine

当一个错误发生时,如何阻止另一个错误?

\n\n

我必须使用res1和res2\xef\xbc\x8cin生产res1,res2不是相同的静态类型。

\n\n
package 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}\n
Run Code Online (Sandbox Code Playgroud)\n

Bur*_*dar 5

公共上下文应该能够取消所有等待的请求。像这样的东西:

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 请求也应该取消。