Advertisement
Guest User

Untitled

a guest
May 3rd, 2016
639
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.21 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "encoding/json"
  5.     "fmt"
  6.     "io/ioutil"
  7.     "net/http"
  8.     "sync"
  9. )
  10.  
  11. type Story struct {
  12.     Title string
  13. }
  14.  
  15. func main() {
  16.     rsp, err := http.Get("https://hacker-news.firebaseio.com/v0/topstories.json")
  17.     if err != nil {
  18.         panic(err)
  19.     }
  20.     defer rsp.Body.Close()
  21.  
  22.     data, err := ioutil.ReadAll(rsp.Body)
  23.     if err != nil {
  24.         panic(err)
  25.     }
  26.  
  27.     var ids []int
  28.     if err := json.Unmarshal(data, &ids); err != nil {
  29.         panic(err)
  30.     }
  31.  
  32.     var cursor int
  33.     var mutex sync.Mutex
  34.  
  35.     next := func() int {
  36.         mutex.Lock()
  37.         defer mutex.Unlock()
  38.         temp := cursor
  39.         cursor++
  40.         return temp
  41.     }
  42.  
  43.     wg := sync.WaitGroup{}
  44.     for i := 0; i < 8; i++ {
  45.         wg.Add(1)
  46.         go func() {
  47.             for cursor := next(); cursor < len(ids); cursor = next() {
  48.                 url := fmt.Sprintf(
  49.                     "https://hacker-news.firebaseio.com/v0/item/%d.json",
  50.                     ids[cursor],
  51.                 )
  52.                 rsp, err := http.Get(url)
  53.                 if err != nil {
  54.                     panic(err)
  55.                 }
  56.                 defer rsp.Body.Close()
  57.  
  58.                 data, err := ioutil.ReadAll(rsp.Body)
  59.                 if err != nil {
  60.                     panic(err)
  61.                 }
  62.                 var story Story
  63.                 if err := json.Unmarshal(data, &story); err != nil {
  64.                     panic(err)
  65.                 }
  66.                 fmt.Println(story.Title)
  67.             }
  68.             wg.Done()
  69.         }()
  70.     }
  71.  
  72.     wg.Wait()
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement