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

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

Golang嵌套結(jié)構(gòu)沒有被省略

Golang嵌套結(jié)構(gòu)沒有被省略

Go
侃侃爾雅 2023-01-03 15:53:10
我想省略嵌套在 JSON 請求中的某些結(jié)構(gòu)。我在 golang 上創(chuàng)建了一個(gè) rest API,它從 http 請求中讀取消息正文,將其解碼為代碼中定義的結(jié)構(gòu)并將其插入 Mongo DB我的結(jié)構(gòu)如下。請注意,對于嵌套結(jié)構(gòu)C,我使用了一個(gè)指針以便能夠省略它。type A struct {    Title        string        `json:"title"`    Text         string        `json:"text"`    Data         B             `json:"data"`}type B struct {    Product      *C            `json:"product,omitempty"`    ExternalLink string        `json:"external_link,omitempty"`}type C struct {    Name          string       `json:"name"`     Id            int          `json:"id"`   }這是我解碼它的方式(沒有去 Json.Unmarshall 因?yàn)槲易x到對于 http 主體,解碼應(yīng)該在unmarshall上使用)func NewMessage(req *http.Request) *A {      var newMessage *A      json.NewDecoder(req.Body).Decode(&newMessage)      messageInData := newMessage      return newMessage}返回時(shí)的“newMessage”直接插入到 Mongo 中。但是,即使請求有效負(fù)載不包含諸如結(jié)構(gòu) C 之類的對象,如下所示{    "title": "First message from GoLang",    "text": "Hello Dastgyr",    "data": {             "external_link": "some link here"             //no product object (C struct) here             }}插入到 Mongo 中的對象仍然包含具有空值的結(jié)構(gòu) C,如下所示{    "title": "First message from GoLang",    "text": "Hello Dastgyr",    "data": {             "product": null,             "external_link": "some link here"             }}我也嘗試過在 Struct A 中使用 B 作為指針,但無濟(jì)于事type A struct {    Title        string        `json:"title"`    Text         string        `json:"text"`    Data         *B            `json:"data,omitempty"`}我希望能夠省略某些嵌套結(jié)構(gòu)。盡管使用了指針,但我想要的結(jié)構(gòu)仍然沒有遺漏。我在定義結(jié)構(gòu)時(shí)犯了什么錯誤?對 golang 還是新手,所以向正確的方向推動會有所幫助
查看完整描述

1 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

您正在使用 json 標(biāo)簽進(jìn)行 json 解封送處理,它似乎是正確的解封送處理(因?yàn)槟鷽]有提到任何錯誤而得出結(jié)論,并繼續(xù)使用 MongoDB)


如何將數(shù)據(jù)添加到 MongoDB 是完全不同的事情,與您的 JSON 標(biāo)記無關(guān)。它使用 bson 標(biāo)簽,如果您希望使用相同的結(jié)構(gòu)作為 mongo DB 模型表示,則需要添加它們。是這樣的:


type A struct {

    Title        string        `json:"title" bson:"title"`

    Text         string        `json:"text" bson:"text"`

    Data         *B            `json:"data,omitempty" bson:"data,omitempty"`

}

請記住,golang 中的標(biāo)簽只是一些添加了結(jié)構(gòu)的元數(shù)據(jù),一些代碼實(shí)際讀取并作用于該結(jié)構(gòu)。json 庫識別并處理json:""標(biāo)簽,而您可能使用的官方 go mongodb 庫將處理bson:""標(biāo)簽。


查看完整回答
反對 回復(fù) 2023-01-03
  • 1 回答
  • 0 關(guān)注
  • 103 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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