Benutzerdefiniertes XML-Parsing für Time.Time-Felder in Go
Beim Unmarshaling von XML-Daten in eine Go-Struktur kann es vorkommen, dass die Das Datumsfeldformat unterscheidet sich vom Standardformat „time.Time“, was zu einem Unmarshaling-Fehler führt. Diese Frage befasst sich mit den verfügbaren Optionen zum Angeben eines benutzerdefinierten Datumsformats während des Unmarshaling-Prozesses.
Das Problem ergibt sich aus der Tatsache, dass time.Time die xml.Unmarshaler-Schnittstelle nicht implementiert, sodass Sie kein benutzerdefiniertes Datum angeben können Format. Als Lösung können Sie eine Wrapper-Struktur mit einem anonymen time.Time-Feld erstellen und Ihre eigene UnmarshalXML-Methode mit dem gewünschten Datumsformat implementieren.
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 }
Mit diesem Ansatz können Sie XML-Dokumente mit benutzerdefinierten Datumsformaten entmarshalieren unter Wahrung der Typensicherheit. Wenn das Datum als Attribut gespeichert wird, kann ein ähnlicher Ansatz verwendet werden, indem stattdessen UnmarshalXMLAttr implementiert wird. Eine Beispielimplementierung ist unter http://play.golang.org/p/EFXZNsjE4a verfügbar.
Das obige ist der detaillierte Inhalt vonWie analysiere ich benutzerdefinierte Time.Time-Felder in Go XML?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!