Maison  >  Article  >  développement back-end  >  Comment analyser les champs Time.Time personnalisés dans Go XML ?

Comment analyser les champs Time.Time personnalisés dans Go XML ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 12:12:02857parcourir

How to Parse Custom Time.Time Fields in Go XML?

Analyse XML personnalisée pour les champs Time.Time dans Go

Lors de la désagrégation de données XML dans une structure Go, vous pouvez rencontrer une situation où le Le format du champ de date diffère du format time.Time par défaut, ce qui entraîne une erreur de démarshaling. Cette question examine les options disponibles pour spécifier un format de date personnalisé pendant le processus de démarshalage.

Le problème vient du fait que time.Time n'implémente pas l'interface xml.Unmarshaler, vous empêchant de spécifier une date personnalisée. format. En guise de solution, vous pouvez créer une structure wrapper avec un champ time.Time anonyme et implémenter votre propre méthode UnmarshalXML avec le format de date souhaité.

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
}

Cette approche vous permet de désorganiser des documents XML avec des formats de date personnalisés. tout en maintenant la sécurité du type. Si la date est stockée en tant qu'attribut, une approche similaire peut être utilisée en implémentant UnmarshalXMLAttr à la place. Un exemple de mise en œuvre est disponible sur 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!

Déclaration:
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