stringgohacker-news-api

uint8 to literal string representation


I'm trying to access the HackerNews API endpoint with a given ID 22024283 which represents a particular news item e.g https://hacker-news.firebaseio.com/v0/22024283.json

This itemID is of type uint8and I need to convert this to it's string representation to insert into the URL.

I cannot use strconv.Itoa(int(id)) as that will produce the number 91 and not preserve 22024283.

Any help on this would be appreciated. Here is my code so far, function of interest is GetHackerNewsItem():


import (
    "fmt"
    "io/ioutil"
    "net/http"
    "strconv"
    "time"
)

//Client represents connection to firebase datastore
type Client struct {
    BASEURI string
    Version string
    Suffix  string
}
type Item struct {
    id          int       `json:"id"`
    itemtype    string    `json:"itemtype"`
    by          string    `json:"by"`
    time        time.Time `json:"time"`
    kids        []int     `json:"kids"`
    url         string    `json:"url"`
    score       int       `json:"score"`
    text        string    `json:"text"`
    title       string    `json:"title"`
    descendants int       `json:"descendants"`
}

//Connect to firebase datastore
func NewHackerNewsClient() *Client {
    var client Client
    client.BASEURI = "https://hacker-news.firebaseio.com/"
    client.Version = "v0"
    client.Suffix = ".json"
    return &client
}
func MakeHTTPRequest(url string) ([]byte, error) {
    response, err := http.Get(url)
    if err != nil {
        fmt.Printf("The http request failed with the error %s\n", err)
    }
    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Printf("Failed to read response data with the error %s\n", err)
        return nil, err
    }
    return body, nil

}

func (client *Client) GetHackerNewsItem(id uint8) []byte {
    itemID := strconv.Itoa(int(id))
    fmt.Printf(itemID)
    url := client.BASEURI + client.Version + itemID + client.Suffix
    fmt.Printf(url)
    item, _ := MakeHTTPRequest(url)
    fmt.Print(item)
    return item
}
func (client *Client) GetTopStories() {

    url := client.BASEURI + client.Version + "/topstories/" + client.Suffix
    itemArray, _ := MakeHTTPRequest(url)
    for i := 0; i < len(itemArray); i++ {
        item := client.GetHackerNewsItem(itemArray[i])
        fmt.Print(item)
    }
}

func main() {
    client := NewHackerNewsClient()
    client.GetTopStories()

}

Solution

  • itemArray, _ := MakeHTTPRequest(url)

    itemArray must be unmarshaled like

    dat := make([]uint64, 0)
    if err := json.Unmarshal(itemArray, &dat); err != nil {
            panic(err)
    }