第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Go 遞歸在數(shù)組中累積/追加值時出現(xiàn)問題

使用 Go 遞歸在數(shù)組中累積/追加值時出現(xiàn)問題

Go
HUWWW 2023-05-08 17:57:09
首先,這是我第一個使用 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)}不良行為:數(shù)組中的值projects []*ProjectsResponse被附加到遞歸的每次迭代中,但是當遞歸結束時,我得到一個空數(shù)組列表。因此,不知何故,在innerRequests結束之后,在方法project內的變量中request我什么也得不到。希望有人發(fā)現(xiàn)我的錯誤。提前致謝。
查看完整描述

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)...)

}


查看完整回答
反對 回復 2023-05-08
?
慕容3067478

TA貢獻1773條經(jīng)驗 獲得超3個贊

混淆在于sliceGo 中處理 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

}


查看完整回答
反對 回復 2023-05-08
  • 2 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號