Go XML での時刻の書式設定 time.Time フィールドのアンマーシャル
XML データを Go 構造体にアンマーシャリングすると、日付フィールドに遭遇すると問題が発生することがあります。デフォルト以外の形式。この記事では、文字列変換に依存せずに日付を解析する問題について説明します。
time.Time 型の DateEntered フィールドを含むサンプル構造体 Transaction について考えてみましょう。 XML データを返す API は、time.Time で使用されるデフォルトの形式とは異なる「yyyymmdd」日付形式を使用します。
残念ながら、time.Time は xml.Unmarshaler インターフェイスを実装していないため、直接指定できません。カスタムの日付形式。この制限を克服するために、匿名の time.Time フィールドとカスタム UnmarshalXML 実装を使用してカスタム構造体を作成できます。
type Transaction struct { // ... DateEntered customTime `xml:"enterdate"` // use your own type that satisfies 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 を実装することで、customTime 型はカスタムの "yyyymmdd" 日付形式と格納を処理できます。親トランザクション構造体の匿名 time.Time フィールドの解析された値。
このアプローチにより、日付が手動で文字列変換したり、デフォルトの解析仮定に依存したりする必要がなく、正しい time.Time 形式で解析および保存されます。
以上がGo で XML 日付文字列を Time.Time フィールドにアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。