亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

“無效的遞歸類型”和“聲明中的非法循環”

“無效的遞歸類型”和“聲明中的非法循環”

Go
慕婉清6462132 2022-05-10 14:08:32
下面兩種自定義類型的簡化示例?!皢栴}”包含“已保存問題”,“已保存問題”包含“問題”。錯誤: 1. SavedQuestion 聲明中的非法循環 2. 無效的遞歸類型 Questiontype Question struct {    ID                    int           `json:"id"`    Name                  string        `json:"name"`    QueryText             string        `json:"query_text"`    SavedQuestion         SavedQuestion `json:"saved_question"`}type SavedQuestion struct {    ID                       int             `json:"id"`    Index                    int             `json:"index"`    Name                     string          `json:"name"`    Packages                 PackageSpecList `json:"packages"`    QueryText                string          `json:"query_text"`    Question                 Question        `json:"question"`}我正在對某些類型進行建模以使用第 3 方 API……第 3 方 API 的對象以這種方式建模?!癝avedQuestion”是一個單獨的類型,它基本上包含一個“問題”以及一堆關于它的其他數據,這似乎是完全正常的......我可以看到一個“問題”的循環也包含一個“SavedQuestion”.. . 但這就是 API 的作用。正如您從 json 標簽中看到的那樣,我只是想準確地對 API 發送的內容進行建模,以便我可以編組/解組等。我該如何進行這項工作?我可以將“SavedQuestion”中的“問題”作為指向“問題”的指針,錯誤就會消失......但是我不知道我是否應該或需要這樣做,或者它是否真的可以作為代碼還不夠完整,無法運行測試...新的地鼠迷糊了...感謝您的任何意見。
查看完整描述

1 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

您不能在另一個結構中遞歸地包含一個結構,原因很簡單,即結構的大小和內存布局變得遞歸。的大小Question是一些數據的大小+(SavedQuestion)的大小,SavedQuestion大小是一些數據的大小+ Question...的大小


但是,如果使用指針,大小問題就解決了:


type Question struct {

    ID                    int           `json:"id"`

    Name                  string        `json:"name"`

    QueryText             string        `json:"query_text"`

    SavedQuestion         *SavedQuestion `json:"saved_question"`

}

您需要確定何時引用question.SavedQuestion,它不是 nil。這對于編組/解組非常有效。當你解組時,如果 JSON 沒有saved_question元素,它將為零。


查看完整回答
反對 回復 2022-05-10
  • 1 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號