Surmonter les écarts de format de date dans Golang XML Unmarshal avec time.Time
La récupération de données XML via les API REST spesso présente un défi lorsque l'on tente de démarshaler les données dans une structure Golang. Un problème fréquent survient lorsque le format de date renvoyé par l'API ne correspond pas au format d'analyse time.Time par défaut, ce qui entraîne des échecs de démarshaling.
Dans de tels cas, il est tentant de recourir à l'utilisation d'une chaîne pour représenter le champ datetime, mais il est préférable de conserver des types correctement définis. Pour résoudre ce problème, la question explore s'il existe une méthode pour spécifier un format de date personnalisé lors du démarshalage dans un champ time.Time.
Démarshaling personnalisé avec xml.UnmarshalXML
Le package d'encodage XML de la bibliothèque standard offre une solution via l'interface xml.Unmarshaler. Cependant, time.Time n'implémente pas cette interface, ce qui nous empêche de spécifier un format de date personnalisé.
Pour surmonter cette limitation, nous pouvons définir un nouveau type de structure personnalisé qui encapsule un champ time.Time et implémente notre propre Méthode UnmarshalXML. Cette méthode analysera la chaîne de date XML en utilisant le format souhaité et définira la valeur time.Time sous-jacente en conséquence.
Exemple de mise en œuvre
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 }
En utilisant cet UnmarshalXML personnalisé méthode, nous pouvons effectivement spécifier notre propre format de date et garantir que le champ time.Time est correctement renseigné lors de la désagrégation des données XML.
Notes supplémentaires
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!