您正在一次启动所有请求。如果文件中有1000个url,则您一次要启动1000个go例程。这可能有效,但可能会给您有关套接字或文件句柄不足的错误。我建议一次启动一定数量的抓取操作,例如下面的代码。
这也将有助于时间安排。
package mainimport ( "fmt" "io/ioutil" "log" "net/http" "strings" "sync" "time")func get_resp_time(url string) { time_start := time.Now() resp, err := http.Get(url) if err != nil { log.Printf("Error fetching: %v", err) } defer resp.Body.Close() fmt.Println(time.Since(time_start), url)}func main() { content, _ := ioutil.ReadFile("url_list.txt") urls := strings.Split(string(content), "n") const workers = 25 wg := new(sync.WaitGroup) in := make(chan string, 2*workers) for i := 0; i < workers; i++ { wg.Add(1) go func() { defer wg.Done() for url := range in { get_resp_time(url) } }() } for _, url := range urls { if url != "" { in <- url } } close(in) wg.Wait()}


