$ time go run call-url-concurrent.go < urls.txt >/dev/null
real 0m1.523s
user 0m0.474s
sys 0m0.109s
$ time go run call-url-synchronous.go < urls.txt >/dev/null
real 0m5.349s
user 0m0.444s
sys 0m0.120s
| package main | |
| import ( | |
| "bufio" | |
| "fmt" | |
| "io" | |
| "net/http" | |
| "os" | |
| "sync" | |
| ) | |
| func readUrlsFrom(source *os.File) []string { | |
| var urls []string | |
| r := bufio.NewReader(os.Stdin) | |
| for { | |
| line, _, err := r.ReadLine() | |
| url := string(line) | |
| if url != "" { | |
| urls = append(urls, url) | |
| } | |
| if err == io.EOF { | |
| break | |
| } | |
| } | |
| return urls | |
| } | |
| func main() { | |
| urls := readUrlsFrom(os.Stdin) | |
| channel := make(chan string) | |
| var wg sync.WaitGroup | |
| wg.Add(len(urls)) | |
| for _, url := range urls { | |
| go callURL(url, channel, &wg) | |
| } | |
| go func() { | |
| for status := range channel { | |
| fmt.Println(status) | |
| } | |
| }() | |
| wg.Wait() | |
| } | |
| func callURL(url string, channel chan string, wg *sync.WaitGroup) { | |
| defer wg.Done() | |
| resp, err := http.Get(url) | |
| if err != nil { | |
| channel <- fmt.Sprintf("%s: %s", url, err.Error()) | |
| return | |
| } | |
| channel <- fmt.Sprintf("%s: %s", url, resp.Status) | |
| } |
| package main | |
| import ( | |
| "bufio" | |
| "fmt" | |
| "io" | |
| "net/http" | |
| "os" | |
| ) | |
| func readUrlsFrom(source *os.File) []string { | |
| var urls []string | |
| r := bufio.NewReader(os.Stdin) | |
| for { | |
| line, _, err := r.ReadLine() | |
| url := string(line) | |
| if url != "" { | |
| urls = append(urls, url) | |
| } | |
| if err == io.EOF { | |
| break | |
| } | |
| } | |
| return urls | |
| } | |
| func main() { | |
| urls := readUrlsFrom(os.Stdin) | |
| for _, url := range urls { | |
| fmt.Println(callURL(url)) | |
| } | |
| } | |
| func callURL(url string) string { | |
| resp, err := http.Get(url) | |
| if err != nil { | |
| return fmt.Sprintf("%s: %s", url, err.Error()) | |
| } | |
| return fmt.Sprintf("%s: %s", url, resp.Status) | |
| } |
$ time go run call-url-concurrent.go < urls.txt >/dev/null
real 0m1.523s
user 0m0.474s
sys 0m0.109s
$ time go run call-url-synchronous.go < urls.txt >/dev/null
real 0m5.349s
user 0m0.444s
sys 0m0.120s
| http://www.google.com | |
| http://www.github.com | |
| http://www.facebook.com | |
| http://www.youtube.com | |
| http://www.baidu.com | |
| http://www.yahoo.com | |
| http://www.wikipedia.com | |
| http://www.amazon.com | |
| http://www.twitter.com | |
| http://www.linkedin.com |