首頁 > 後端開發 > Golang > 在 Golang 中將 XML 解組到「time.Time」欄位時如何指定自訂日期格式?

在 Golang 中將 XML 解組到「time.Time」欄位時如何指定自訂日期格式?

Barbara Streisand
發布: 2024-11-09 08:47:02
原創
724 人瀏覽過

How to Specify a Custom Date Format When Unmarshaling XML into a `time.Time` Field in Golang?

克服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 欄位。

附加說明

  • 如果XML 元素使用屬性來表示日期,您可以以類似的方式實作 UnmarshalXMLAttr。
  • 為了進一步參考,提供的 Go Playground 演示了實現:http://play.golang.org/p/ EFXZNsjE4a

以上是在 Golang 中將 XML 解組到「time.Time」欄位時如何指定自訂日期格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板