github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2012/tutorial/3func.go (about) 1 // +build OMIT 2 3 package main 4 5 import ( 6 "encoding/json" 7 "errors" 8 "fmt" 9 "log" 10 "net/http" 11 ) 12 13 func main() { 14 items, err := Get("golang") // HL 15 if err != nil { 16 log.Fatal(err) 17 } 18 for _, item := range items { // HL 19 fmt.Println(item.Title) 20 } 21 } 22 23 type Response struct { 24 Data struct { 25 Children []struct { 26 Data Item 27 } 28 } 29 } 30 31 type Item struct { 32 Title string 33 URL string 34 } 35 36 func Get(reddit string) ([]Item, error) { 37 url := fmt.Sprintf("http://reddit.com/r/%s.json", reddit) // HLurl 38 resp, err := http.Get(url) // HLget 39 if err != nil { 40 return nil, err // HLreturn 41 } 42 defer resp.Body.Close() // HLclose 43 if resp.StatusCode != http.StatusOK { // HLstatus 44 return nil, errors.New(resp.Status) // HLerrors 45 } 46 r := new(Response) // HLdecode 47 err = json.NewDecoder(resp.Body).Decode(r) // HLdecode 48 if err != nil { 49 return nil, err // HLreturn 50 } 51 items := make([]Item, len(r.Data.Children)) // HLprepare 52 for i, child := range r.Data.Children { // HLconvert 53 items[i] = child.Data // HLconvert 54 } // HLconvert 55 return items, nil // HLreturn 56 }