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

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

Golang 中的動態 JSON 結構未按預期運行

Golang 中的動態 JSON 結構未按預期運行

Go
拉莫斯之舞 2023-03-21 17:16:09
我正在嘗試創建一個結構,其中包含一些始終存在的基本字段和一些本身就是結構的可選字段。我想知道為什么下面的代碼:package mainimport (    "encoding/json"    "fmt"    "time")type DataManagement struct {    DataManagement struct {        Type              string        Asset struct {            LocalAssetUID string            Type          string        }        *ContentProductionOrder        *ContentItem        TimeStamp         time.Time        Hash              string    }}type ContentProductionOrder struct {    ProductionOrderNo int    ItemNo            int    StartDate         time.Time    FinishDate        time.Time    StatusID          int    StatusDate        time.Time    SourceTypeID      int    TrackingID        int}type ContentItem struct {    ItemNo     int    ItemText   string    Quantity   int}func main() {    var contentItem ContentItem    contentItem.ItemNo = 123    contentItem.ItemText = "aaaaaaaa"    contentItem.Quantity = 3    var dataManagement DataManagement    dataManagement.DataManagement.Type = "asd"    dataManagement.DataManagement.Asset.LocalAssetUID = "asd"    dataManagement.DataManagement.Asset.Type = "asd"    dataManagement.DataManagement.ContentItem = &contentItem    dataManagement.DataManagement.TimeStamp = time.Now().UTC()    dataManagement.DataManagement.Hash = "123"    xy, _ := json.MarshalIndent(dataManagement, "", "  ")    fmt.Println(string(xy))    xy, _ = json.MarshalIndent(contentItem, "", "  ")    fmt.Println(string(xy))}輸出如下:{  "DataManagement": {    "Type": "asd",    "Asset": {      "LocalAssetUID": "asd",      "Type": "asd"    },    "ItemText": "aaaaaaaa",    "Quantity": 3,    "TimeStamp": "2009-11-10T23:00:00Z",    "Hash": "123"  }}{  "ItemNo": 123,  "ItemText": "aaaaaaaa",  "Quantity": 3}有任何想法嗎?這可能很容易解釋;我在 Golang 方面沒有那么豐富的經驗。
查看完整描述

1 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

你沒有得到你想要的輸出是因為你使用了嵌入式結構而ContentItem不是DataManagement字段名稱來添加到結構中。

使用類型聲明但沒有顯式字段名稱的字段稱為嵌入字段。嵌入字段必須指定為類型名稱 T 或指向非接口類型名稱 *T 的指針,并且 T 本身可能不是指針類型。非限定類型名稱充當字段名稱。

現場聲明將解決您的問題。您應該將結構更改DataManagement為:

type DataManagement struct {
    DataManagement struct {
        Type  string
        Asset struct {
            LocalAssetUID string
            Type          string
        }
        *ContentProductionOrder // this is embedded struct
        ContentItem *ContentItem
        TimeStamp time.Time
        Hash      string
    }
}

Go Playground上的工作代碼

有關更多信息,請查看結構類型的 Golang 規范


查看完整回答
反對 回復 2023-03-21
  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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