Прежде всего, это моя первая не фиктивная программа, использующая Go.Будем благодарны за любые рекомендации.
Описание кода:
Я хочу получить всю информацию из API, где эта информация разбита на страницы.Поэтому я хочу перебрать все страницы, чтобы получить всю информацию.
Это то, что я сделал до сих пор:
У меня есть эти две функции:
func request(requestData *RequestData) []*ProjectsResponse {
client := &http.Client{
Timeout: time.Second * 10,
}
projects := []*ProjectsResponse{}
innerRequest(client, requestData.URL, projects)
return projects
}
func innerRequest(client *http.Client, URL string, projects []*ProjectsResponse) {
if URL == "" {
return
}
req, err := http.NewRequest("GET", URL, nil)
if err != nil {
log.Printf("Request creation failed with error %s\n", err)
}
req.Header.Add("Private-Token", os.Getenv("API_KEY"))
res, err := client.Do(req)
log.Printf("Executing request: %s", req.URL)
if err != nil {
log.Printf("The HTTP request failed with error %s\n", err)
}
data, _ := ioutil.ReadAll(res.Body)
var response ProjectsResponse
err = json.Unmarshal(data, &response)
if err != nil {
log.Printf("Unmarshalling failed with error %s\n", err)
}
projects = append(projects, &response)
pagingData := getPageInformation(res)
innerRequest(client, pagingData.NextLink, projects)
}
Нежелательное поведение:
Значения в массиве projects []*ProjectsResponse
добавляются на каждой итерации рекурсии, но когда рекурсия заканчивается, я получаю пустой список массивов.Итак, как-то после того, как innerRequests
заканчивается, в переменной project
внутри метода request
я ничего не получаю.
Надеюсь, кто-нибудь и обнаружит мою ошибку.Заранее спасибо.