Я успешно интегрировал API и декодировал данные в свои структуры Go. Основная проблема заключается в управлении логикой нарезки внутри контроллера.
Мне нужно изменить функцию контроллера (
Код: Выделить всё
Collection- Прочитать параметр запроса ?page=X.
- Вычислить индексы начала и конца фрагмента.
- Передать в шаблон только необходимый фрагмент фильмов (например, 5 фильмов).
Код: Выделить всё
functions/films.goКод: Выделить всё
func GetPopularFilms() ([]structure.PopularFilmsData, error) {
// Local struct for JSON decoding
type ApiData struct {
Results []struct {
Title string `json:"title"`
Vote_Average float64 `json:"vote_average"`
Overview string `json:"overview"`
Release_date string `json:"release_date"`
Poster_path string `json:"poster_path"`
}
}
// ... Code for executing the HTTP request and error checking ...
var decodeData ApiData
if err := json.NewDecoder(res.Body).Decode(&decodeData); err != nil {
return nil, err
}
// Mapping to my view struct
var films []structure.PopularFilmsData
for _, result := range decodeData.Results {
films = append(films, structure.PopularFilmsData{
Title: result.Title,
Overview: result.Overview,
Release_date: result.Release_date,
Poster_path: "https://image.tmdb.org/t/p/original" + result.Poster_path,
})
}
return films, nil // Returns ALL fetched films
}
Код: Выделить всё
controllers/collection.goКод: Выделить всё
func Collection(w http.ResponseWriter, r *http.Request) {
films, err := functions.GetPopularFilms()
if err != nil {
// Error handling (omitted for brevity)
return
}
// Currently sends ALL films.
data := PageData{
PopularFilms: films,
// How should I calculate and pass TotalPages, CurrentPage, and the film sub-slice here?
}
tmpl := template.Must(template.ParseFiles("template/collection.html"))
tmpl.Execute(w, data)
}
Код: Выделить всё
?page=XКод: Выделить всё
startМне также нужен совет, как правильно обрабатывать крайние случаи, например, когда запрошенный индекс превышает общую длину среза.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... pi-results
Мобильная версия