gpt4 book ai didi

arrays - 使用 Go 递归在数组中累积/追加值时出现问题

转载 作者:数据小太阳 更新时间:2023-10-29 03:32:29 25 4
gpt4 key购买 nike

首先,这是我第一个使用 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 结束后,在 request 方法内的 project 变量中,我什么也得不到。

希望有人发现我的错误。提前致谢。

最佳答案

我猜你所有的项目对象都在函数范围内,所以当函数结束时它们不再存在。我认为在调用 innerRequest 之前您不需要项目存在,因此您应该只让该方法返回项目。我认为这样的事情应该可行......

func innerRequest(client *http.Client, URL string) []*ProjectsResponse {

if URL == "" {
return nil
}

//More code...

pagingData := getPageInformation(res)
return append([]*ProjectsResponse{&response}, innerRequest(client, pagingData.NextLink)...)
}

关于arrays - 使用 Go 递归在数组中累积/追加值时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53383372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com