Parsear соединение header в golang

Я хочу сделать request в Go в API но ответы они приходят пролистанные, так что я должен пробегать их.

Пагинация приходит header в элементе link, что-то похожее на это:

; rel="next",; rel="prev";; rel="last"

Он пробовал решать это с регулярными выражениями и с Splits но в обоих случаях я этого не добился.

request я это делаю с книжным магазином http, такая:

resp, err := http.Get("http://example.com/")

и Header.link я это получаю так:

resp.Header.Get("link")

и результат - string, который я поместил наверху.

Вопрос

Как я получаю последнюю страницу? И остальные?

В мире javascript мы имеем parse-link-header, так что возможно, что также есть что-то похожее в Go.

4
задан 15.04.2016, 03:58
1 ответ

EncontrГ© эта pequeГ±a librerГ - в linkheader для go, в любом случае ты можешь видеть, как был осуществлен aquГ - main.go , - одинокие 120 линий, но я вижу, что они только используют split, так как структура соединение header достаточно простое. regex всегда приносят проблемы.

Пример использования:

import (
    "fmt"

    "github.com/tomnomnom/linkheader"
)

func ExampleParse() {
    header := "<https://api.github.com/user/58276/repos?page=2>; rel=\"next\"," +
        "<https://api.github.com/user/58276/repos?page=2>; rel=\"last\""
    links := linkheader.Parse(header)

    for _, link := range links {
        fmt.Printf("URL: %s; Rel: %s\n", link.URL, link.Rel)
    }

    // Output:
    // URL: https://api.github.com/user/58276/repos?page=2; Rel: next
    // URL: https://api.github.com/user/58276/repos?page=2; Rel: last
}
3
ответ дан 24.11.2019, 14:35