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  }