克服Golang XML Unmarshal 中的日期格式差異與time.Time
透過REST API 擷取XML 資料spesso 在嘗試解組時提出了挑戰將資料轉換為Golang 結構體。當 API 傳回的日期格式與預設的 time.Time 解析格式不一致時,會出現一個常見問題,導致解組失敗。
在這種情況下,人們很容易求助於使用字串來表示時間日期時間字段,但最好維護正確定義的類型。為了解決這個問題,該問題探討了在解組到 time.Time 欄位時是否有一種方法可以指定自訂日期格式。
使用 xml.UnmarshalXML 進行自訂解組
標準庫的xml編碼包透過xml.Unmarshaler介面提供了解決方案。然而,time.Time 並沒有實作這個接口,導致我們無法指定自訂日期格式。
為了克服這個限制,我們可以定義一個新的自訂結構體類型來包裝 time.Time 欄位並實作我們自己的UnmarshalXML 方法。此方法將使用我們所需的格式解析 XML 日期字串,並相應地設定底層 time.Time 值。
範例實作
type Transaction struct { //... DateEntered customTime `xml:"enterdate"` // Use our custom type that implements UnmarshalXML //... } type customTime struct { time.Time } func (c *customTime) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { const shortForm = "20060102" // yyyymmdd date format var v string d.DecodeElement(&v, &start) parse, err := time.Parse(shortForm, v) if err != nil { return err } *c = customTime{parse} return nil }
透過利用此自訂UnmarshalXML方法,我們可以有效地指定我們自己的日期格式,並確保在解組XML 資料時正確填入time.Time 欄位。
附加說明
以上是在 Golang 中將 XML 解組到「time.Time」欄位時如何指定自訂日期格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!