2 回答
TA贡献1851条经验 获得超3个赞
我猜你所有的项目对象都在函数范围内,所以当函数结束时它们不再存在。我认为在调用 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)...)
}
TA贡献1773条经验 获得超3个赞
混淆在于slice
Go 中处理 a 的方式。这是深入的解释,但我会缩写。
常见的误解是slice
你传递的是对的引用slice
,这是错误的。处理切片时操作的实际变量称为切片标头。这是一个简单的底层数组struct
引用,并遵循 Go 的按值传递规则,即它在传递给函数时被复制。因此,如果未返回,您将不会拥有更新的标头。
从递归返回数据遵循一个简单的模式。这是一个基本示例。我还包括一个不需要返回的版本,但作为参考对切片进行操作,这将修改原始版本。(注意:传递切片指针通常不被认为是惯用的 Go)
游乐场链接:https://play.golang.org/p/v5XeYpH1VlF
// correct way to return from recursion
func addReturn(s []int) []int {
if finalCondition(s) {
return s
}
s = append(s, 1)
return addReturn(s)
}
// using a reference
func addReference(s *[]int) {
if finalCondition(*s) {
return
}
*s = append(*s, 1)
addReference(s)
}
// whatever terminates the recursion
func finalCondition(s []int) bool {
if len(s) >= 10 {
return true
}
return false
}
- 2 回答
- 0 关注
- 118 浏览
添加回答
举报