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

比如说,我为了更快的获得某个网页,同时发起了10个go程,分别通过不同的代理去抓取该网页,那么当我从某个go程获得返回后,就需要关闭其余9个以释放资源。 但是此时这9个go程,按照一般的写法,大概率是阻塞在http.Get或者类似的函数上,这个情况下,go程无法再从外部获取信息了———因为已经阻塞住了。 请问各位大兄弟,这种情况下程序逻辑要怎么写才能从外部关闭那9个go程?
已邀请:
应该没有办法从外部杀死一个 go 程,这种最好在 http.Get 时加上超时,go 程执行完就退出了。

xmgee - 90后

应该是不行的
这个不好搞,不行

haohongfan - talk is expensive, just show code

可以考虑用信号实现
context包是用来干吗的? Request.WithContext

bfcaicai - 向往niubility...

channel 读取到任意一个处理完成信号程序退出

lifei6671 - PHPer

其实内置的`http.Request`支持取消操作:

老版本用的是 Request 的 Cancel 属性,新版本用的事 WithContext 方法.

```
ctx,cancel := context.WithCancel(context.Background())
req,err := http.NewRequest(http.MethodGet,"https://www.baidu.com",nil )
if err != nil {
return
}

req = req.WithContext(ctx)
c := http.Client{}
resp,err := c.Do(req)
//取消请求
cancel()
```

要回复问题请先登录注册