首页 > 试题广场 >

在fatchall中尝试使用长一些的参数列表,比如使用在al

[问答题]
在fatchall中尝试使用长一些的参数列表,比如使用在alexa.com的上百万网站里排名靠前的。如果一个网站没有回应,程序将采取怎样的行为?】
推荐
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"time"
"strings"
"io"
"sort"
)
func fetchUrl(url string, ch chan <- map[string]string)
  { //使用map记录,url -> response
start := time.Now()
resp,err := http.Get(url)
result := make(map[string]string)
if err != nil {
result[url] = fmt.Sprintf("http-get: %v",err)
ch <- result
return
}
nbytes,err := io.Copy(ioutil.Discard,resp.Body)
if err != nil {
result[url] = fmt.Sprintf("while reading:%v
  %v",url,err)
ch <- result
return
}
resp.Body.Close()
secs := time.Since(start).Seconds()
//fmt.Printf("%v %v %v Bytes
  %v's\n",url,resp.Status,nbytes,secs)
result[url] = fmt.Sprintf("%v %v %v Bytes
  %v's",url,resp.Status,nbytes,secs)
ch <- result
}
func main() {
start := time.Now()
ch := make(chan map[string]string)
count := 0
for _,url := range os.Args[1:] {
if ! strings.HasPrefix(url,"htto") {
url = "http://" + url
}
fmt.Printf("start fetch %v\n",url)
go fetchUrl(url,ch) // 重复3次
go fetchUrl(url,ch)
go fetchUrl(url,ch)
count += 3
}
result := make(map[string]string)
keys := []string{}
for i:=0;i<count;i++{
for k,v := range <-ch {
result[k] = v
keys = append(keys,k)
}
}
sort.Strings(keys) //按照url排序
for _,k := range keys  {
fmt.Printf("%s : %s\n",k,result[k]) //输出按照URL排序后的结果
}
fmt.Printf("done, use %v
  seconds",time.Since(start).Seconds())
}
发表于 2018-07-12 20:41:57 回复(0)