我正在嘗試創(chuàng)建一個結(jié)構(gòu),其中包含一些始終存在的基本字段和一些本身就是結(jié)構(gòu)的可選字段。我想知道為什么下面的代碼: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 方面沒有那么豐富的經(jīng)驗(yàn)。
1 回答

慕村225694
TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個贊
你沒有得到你想要的輸出是因?yàn)槟闶褂昧饲度胧浇Y(jié)構(gòu)而ContentItem
不是DataManagement
字段名稱來添加到結(jié)構(gòu)中。
使用類型聲明但沒有顯式字段名稱的字段稱為嵌入字段。嵌入字段必須指定為類型名稱 T 或指向非接口類型名稱 *T 的指針,并且 T 本身可能不是指針類型。非限定類型名稱充當(dāng)字段名稱。
現(xiàn)場聲明將解決您的問題。您應(yīng)該將結(jié)構(gòu)更改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上的工作代碼
有關(guān)更多信息,請查看結(jié)構(gòu)類型的 Golang 規(guī)范
- 1 回答
- 0 關(guān)注
- 109 瀏覽
添加回答
舉報
0/150
提交
取消