如何从外部取消访问网页的go程?

snake117 · · 862 次点击
谢谢!我在本站和gocn、golangtc都发问了,目前来看就老哥的方案最好。
#3
更多评论
第一反应是用 context.Context 维护多个go-routine的并发
#1
可以使用http包func (*Request) WithContext函数,构建request时传入上下文,这样便可以在其中一个go程请求完成时,中断其他go程的请求 ```go package main import ( "context" "fmt" "log" "net/http" "sync" ) func main() { multiple3() } func multiple3() { wg := &sync.WaitGroup{} ctx, cancel := context.WithCancel(context.Background()) for i := 0; i < 10; i++ { wg.Add(1) go work3(ctx, "https://studygolang.com", cancel, wg) } wg.Wait() } func work3(ctx context.Context, u string, cancel context.CancelFunc, wg *sync.WaitGroup) { defer wg.Done() req, err := http.NewRequest(http.MethodGet, u, nil) if err != nil { log.Fatal(err) } req = req.WithContext(ctx) rep, err := http.DefaultClient.Do(req) if err != nil { log.Println(err) return } defer rep.Body.Close() fmt.Println(rep.StatusCode) cancel() return } ```
#2