uint8 в буквальное строковое представление - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь получить доступ к конечной точке API HackerNews с указанным идентификатором 22024283, который представляет определенный элемент новостей, например, https://hacker-news.firebaseio.com/v0/22024283.json

Этот идентификатор элемента имеет тип uint8, и я необходимо преобразовать это в string представление для вставки в URL.

Я не могу использовать strconv.Itoa(int(id)), поскольку это произведет число 91 и не сохранит 22024283.

Любая помощь по этому вопросу будет принята с благодарностью. Вот мой код, интересующая функция: 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()

}

1 Ответ

1 голос
/ 15 января 2020

itemArray, _: = MakeHTTPRequest (url)

itemArray должен быть демарширован как

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