我正在嘗試創建一個結構,其中包含一些始終存在的基本字段和一些本身就是結構的可選字段。我想知道為什么下面的代碼: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 規范
- 1 回答
- 0 關注
- 99 瀏覽
添加回答
舉報
0/150
提交
取消