请用 go 语言实现

2020 年 6 月 10 日
 accidentaly
- 实现方法:FindFatestUrl(ctx context.Context,urls []string)(url string,ts time.Duration)
- 找出最快响应 200 的 url 及其响应时间
- 并发请求 url,但同一时刻最多并发请求 5 个 url
- 请求发送 3 秒后若未返回则超时,视为请求失败
- 仅使用 Go 标准库,可使用伪代码表示发送 http 请求
2468 次点击
所在节点    问与答
9 条回复
ym1ng
2020 年 6 月 10 日
作业请自己做(手动狗头
fiypig
2020 年 6 月 10 日
面试题吗
morty961
2020 年 6 月 10 日
这个面试题我也做过。变量名都一样,不会是同一家公司吧
dallaslu
2020 年 6 月 10 日
话说这个题的 point 在协程吗?
sadfQED2
2020 年 6 月 10 日
每个 url 都开一个 go 程请求下,请求结束添加到管道,管道够 200 个就返回,是这个意思吗?
WhatC
2020 年 6 月 10 日
@sadfQED2 200 是 http 的 200 吧
blackeeper
2020 年 6 月 11 日
伪代码,golang 初学者,请大神检阅
```
#urls 放入通道
go func() {ch <- urls;ch.Close()}()
#五个 goroutine,并发
for i=0;1<5;i++ {
go func() {
for url := range ch {
#消费通道
r,err := httpGet(url,timeout=3)
if err != nil || err == TimeoutError {
log.err("请求失败:%s"url)
break
}
#存储返回 200 的结果
if r.StatusCode == 200 {
ts := r.time.Duration
results[url] = ts
}

}
}()
}
#最快相应 200 的 URL
sortTime(results)
```
blackeeper
2020 年 6 月 11 日
xkeyideal
2020 年 6 月 11 日
作业不会做,给钱,我给你完整可运行的实现方案

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/680405

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX