awesome-patterns/concurrency/fetch_urls/main.go

51 lines
804 B
Go
Raw Normal View History

2018-01-25 04:21:49 +03:00
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
urls := []string{
"http://www.reddit.com/r/aww.json",
"http://www.reddit.com/r/funny.json",
"http://www.reddit.com/r/programming.json",
}
resc, errc := make(chan string), make(chan error)
for _, url := range urls {
go func(url string) {
body, err := fetch(url)
if err != nil {
errc <- err
return
}
resc <- string(body)
}(url)
}
for i := 0; i < len(urls); i++ {
select {
case res := <-resc:
fmt.Println(res)
case err := <-errc:
fmt.Println(err)
}
}
}
func fetch(url string) (string, error) {
res, err := http.Get(url)
if err != nil {
return "", err
}
body, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
return "", err
}
return string(body), nil
}