Go语言圣经 - 习题 - 1.6. 并发获取多个URL
2017-03-02 15:31
447 查看
package main import ( "fmt" "io" "io/ioutil" "net/http" "os" "strings" "time" ) type results struct { url string result string } func main() { start := time.Now() ch := make(chan string) result := make(map[string]string) for _, url := range os.Args[1:] { if !strings.HasPrefix(url, "http://") { url = "http://" + url } go fetch(url, ch) go fetch(url, ch) go fetch(url, ch) } for range os.Args[1:] { for i := 0; i < 3; i++ { fmt.Println(<-ch) } } for k, v := range result { fmt.Printf("%s : %s\n", k, v) } fmt.Printf("%.2fs elapsed\n", time.Since(start).Seconds()) } func fetch(url string, ch chan<- string) { start := time.Now() resp, err := http.Get(url) if err != nil { ch <- fmt.Sprint(err) return } nbytes, err := io.Copy(ioutil.Discard, resp.Body) resp.Body.Close() if err != nil { ch <- fmt.Sprintf("while reading %s: %v", url, err) return } secs := time.Since(start).Seconds() ch <- fmt.Sprintf("%.2fs %7d %s", secs, nbytes, url) }
相关文章推荐
- Go语言圣经 - 习题 - 1.5. 获取URL
- Go1.6 和 Go语言圣经中文版 正式发布!
- Go语言_并发篇
- GO语言的并发
- Go语言并发例子
- Go语言并发与并行学习笔记(二)
- Go语言并发与并行学习笔记(一)
- 多种语言下获取当前页完整URL及其参数
- 【go语言】Goroutines 并发模式(二)
- Go语言并发与并行学习笔记(二)
- Go语言并发与并行学习笔记(一)
- 在 Go 语言中,正确的使用并发
- Go语言并发之美
- Go语言的并发
- Go语言 并发篇
- Go语言并发与并行学习笔记(三)
- go 语言并发机制 goroutine 初探
- 学习go语言 我的习题答案 chapter3
- Go语言并发之美:解释其中内核、外延
- go语言获取本地IP地址(图形界面)