我必须生成一个XML
,我当前的代码如下:
type ReportableSeller struct {
Identity Identity `xml:"Identity"`
}
type Identity struct {
EntitySeller *EntitySeller `xml:"EntitySeller,omitempty"`
IndividualSeller *IndividualSeller `xml:"IndividualSeller,omitempty"`
}
type EntitySeller struct {
Standard StandardEntSeller `xml:"Standard"`
}
type IndividualSeller struct {
Standard StandardIndSeller `xml:"Standard"`
}
type StandardEntSeller struct {
EntSellerID EntSellerID `xml:"EntSellerID"`
}
type StandardIndSeller struct {
IndSellerID IndSellerID `xml:"IndSellerID"`
}
type EntSellerID struct {
}
type IndSellerID struct {
}
字符串
使用这些类型,我只需添加IndividualSeller
的EntitySeller
,如果vat
已定义或未定义,则omitempty
将生成正确的xml
。
但是我并不喜欢这样做,因为我必须定义两次Standard
,并在Identity中使用这两个可空变量,而不是一个强制变量,这个想法是使用泛型。
以下是目前为止的结构:
type ReportableSeller struct {
Identity Identity[here I need a sort of interface] `xml:"Identity"`
}
type Identity[T any] struct {
Seller T
}
type EntitySeller struct {
XMLName xml.Name `xml:"EntitySeller"`
Standard Standard[EntSellerID]
}
type IndividualSeller struct {
XMLName xml.Name `xml:"IndividualSeller"`
Standard Standard[IndSellerID]
}
type Standard[T any] struct {
XMLName xml.Name `xml:"Standard"`
SellerID T
}
type EntSellerID struct {
XMLName xml.Name `xml:"EntSellerID"`
}
type IndSellerID struct {
XMLName xml.Name `xml:"IndSellerID"`
}
型
这里的问题是ReportableSeller中的Identity类型需要一个泛型类型:cannot use generic type Identity[T any] without instantiation
。
有可能修好吗?
在C#中,我会使用继承和多态...
编辑:
与此同时,我得出了以下结论:
type Identity struct {
Seller any
}
型
有了它,我可以做我需要做的,但是,不是rely类型和错误安全。
1条答案
按热度按时间7ivaypg91#
如果我对问题的理解是正确的,你只需简单地向
ReportableSeller
添加类型参数,如字符串
和
xml.Marshal
所需的示例型
PLAYGROUND
如果ReportableSeller结构是主项,我同意,但在我的情况下,它是嵌套的:
type DPIBody struct { ReportableSeller []ReportableSeller "xml:"ReportableSeller"" }
尝试为结构体(
ReportableSeller
)实现封送拆收器,并使用一个作为DPIBody
的字段:型
PLAYGROUND的