Maison > développement back-end > Golang > le corps du texte

Comment spécifier un format de date personnalisé lors de la désorganisation du XML dans un champ « time.Time » dans Golang ?

Barbara Streisand
Libérer: 2024-11-09 08:47:02
original
698 Les gens l'ont consulté

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

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
}
Copier après la connexion

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

  • Si l'élément XML utilise un attribut pour représenter la date, vous pouvez implémenter UnmarshalXMLAttr de la même manière.
  • Pour référence ultérieure, le terrain de jeu Go fourni démontre l'implémentation : http://play.golang.org/p/ EFXZNsjE4a

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal