Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.14 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "encoding/json"
  5.     "fmt"
  6.     "log"
  7.     "net/http"
  8.     "sync"
  9. )
  10.  
  11. const (
  12.     storiesURL = "https://hacker-news.firebaseio.com/v0/topstories.json"
  13.     itemURL    = "https://hacker-news.firebaseio.com/v0/item"
  14. )
  15.  
  16. type (
  17.     story struct {
  18.         Title string `json:"title"`
  19.     }
  20.  
  21.     storyID int
  22. )
  23.  
  24. func main() {
  25.     resp, err := http.Get(storiesURL)
  26.     if err != nil {
  27.         log.Fatalln(err)
  28.     }
  29.     defer resp.Body.Close()
  30.  
  31.     var ids []storyID
  32.     if err := json.NewDecoder(resp.Body).Decode(&ids); err != nil {
  33.         log.Fatalln(err)
  34.     }
  35.  
  36.     workChan := make(chan storyID, len(ids))
  37.     wg := sync.WaitGroup{}
  38.  
  39.     for i := 0; i < 8; i++ {
  40.         wg.Add(1)
  41.         go func() (err error) {
  42.             defer wg.Done()
  43.  
  44.             for id := range workChan {
  45.                 url := fmt.Sprintf("%s/%d.json", itemURL, id)
  46.  
  47.                 resp, err := http.Get(url)
  48.                 if err != nil {
  49.                     return err
  50.                 }
  51.                 defer resp.Body.Close()
  52.  
  53.                 var story story
  54.                 if err := json.NewDecoder(resp.Body).Decode(&story); err != nil {
  55.                     return err
  56.                 }
  57.  
  58.                 fmt.Println(story.Title)
  59.             }
  60.  
  61.             return nil
  62.         }()
  63.     }
  64.  
  65.     for _, id := range ids {
  66.         workChan <- id
  67.     }
  68.     close(workChan)
  69.  
  70.     wg.Wait()
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement