Golang XML の日付形式の不一致を克服する time.Time によるアンマーシャル
REST API を介した XML データの取得 spesso は、アンマーシャリングを試みるときに課題を提示しますデータを Golang 構造体に格納します。 API によって返される日付形式がデフォルトの time.Time 解析形式と一致しない場合に、頻繁に問題が発生します。その結果、アンマーシャリングが失敗します。
そのような場合、文字列を使用して表現することに頼る傾向があります。 datetime フィールドですが、適切に定義された型を維持することが望ましいです。この問題に対処するために、質問では、time.Time フィールドにアンマーシャリングするときにカスタム日付形式を指定する方法があるかどうかを検討します。 >標準ライブラリの XML エンコーディング パッケージは、xml.Unmarshaler インターフェイスを介したソリューションを提供します。ただし、time.Time はこのインターフェイスを実装していないため、カスタム日付形式を指定できません。
この制限を克服するには、time.Time フィールドをラップし、独自のフィールドを実装する新しいカスタム構造体型を定義できます。 UnmarshalXML メソッド。このメソッドは、必要な形式を使用して XML 日付文字列を解析し、それに応じて基になる time.Time 値を設定します。
実装例 このカスタム UnmarshalXML を利用することにより、このメソッドを使用すると、独自の日付形式を効果的に指定でき、XML をアンマーシャリングするときに time.Time フィールドが正しく設定されるようになります。 data.補足
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 }XML 要素が日付を表す属性を使用する場合、同様の方法で UnmarshalXMLAttr を実装できます。
さらに参考として、提供されている Go プレイグラウンドで実装を示します。 http://play.golang.org/p/EFXZNsjE4a
以上がGolang で XML を「time.Time」フィールドにアンマーシャリングするときにカスタム日付形式を指定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。