我正在尝试创建一个结构,其中包含一些始终存在的基本字段和一些本身就是结构的可选字段。我想知道为什么下面的代码: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 关注
- 78 浏览
添加回答
举报
0/150
提交
取消