2 回答

TA貢獻1851條經(jīng)驗 獲得超3個贊
我猜你所有的項目對象都在函數(shù)范圍內,所以當函數(shù)結束時它們不再存在。我認為在調用 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條經(jīng)驗 獲得超3個贊
混淆在于slice
Go 中處理 a 的方式。這是深入的解釋,但我會縮寫。
常見的誤解是slice
你傳遞的是對的引用slice
,這是錯誤的。處理切片時操作的實際變量稱為切片標頭。這是一個簡單的底層數(shù)組struct
引用,并遵循 Go 的按值傳遞規(guī)則,即它在傳遞給函數(shù)時被復制。因此,如果未返回,您將不會擁有更新的標頭。
從遞歸返回數(shù)據(jù)遵循一個簡單的模式。這是一個基本示例。我還包括一個不需要返回的版本,但作為參考對切片進行操作,這將修改原始版本。(注意:傳遞切片指針通常不被認為是慣用的 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 關注
- 156 瀏覽
添加回答
舉報