我正在嘗試格式化自定義時間類型 Date,它實現了 Marshaler 接口,并在編寫為 XML 時簡單地將自身格式化為“2006-01-02”。type Person struct { ... DateOfBirth Date `xml:"DOB,attr"` ...}type Date time.Timefunc (d Date) MarshalXML(e *xml.Encoder, start xml.StartElement) error { dateString := fmt.Sprintf("\"%v\"", time.Time(d).Format("2006-01-02")) e.EncodeElement(dateString, start) return nil}我使用這個 SO作為參考,但錯誤 - &xml.UnsupportedTypeError{Type:(*reflect.rtype)} - 被拋出。我錯過了一些東西,有什么想法嗎?
1 回答

GCT1015
TA貢獻1827條經驗 獲得超4個贊
您正在實現錯誤的接口。
由于 Date 類型旨在作為屬性進行封送處理(如xml:"DOB,attr"標簽所示),因此它需要實現xml.MarshalerAttr接口:
type MarshalerAttr interface {
MarshalXMLAttr(name Name) (Attr, error)
}
所以你可能需要添加這樣的代碼:
func (d Date) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
dateString := time.Time(d).Format("2006-01-02")
attr := xml.Attr {
name,
dateString,
}
return attr, nil
}
請注意,我從值字符串中刪除了明顯不必要的引號。
- 1 回答
- 0 關注
- 294 瀏覽
添加回答
舉報
0/150
提交
取消