Maison  >  Article  >  développement back-end  >  Comment désorganiser les champs XML de type time.Time avec des formats de date personnalisés dans Golang ?

Comment désorganiser les champs XML de type time.Time avec des formats de date personnalisés dans Golang ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-07 22:53:03675parcourir

How to Unmarshal XML Fields of Type time.Time with Custom Date Formats in Golang?

Démarrer les champs XML de type time.Time dans Golang

Lorsque vous travaillez avec la récupération de données XML à l'aide de l'API REST dans Golang, ce n'est pas Il est rare de rencontrer un champ de date qui n'est pas conforme au format d'analyse time.Time par défaut. Cette divergence peut entraîner des échecs de démarshalage lorsque vous tentez d'attribuer la date récupérée à un champ time.Time dans une structure GO.

Malheureusement, il n'existe aucun moyen simple de spécifier explicitement le format de date souhaité à la fonction de démarshalage. Cependant, il existe une solution de contournement qui consiste à définir une structure personnalisée pour représenter le champ de date avec le format souhaité.

Voici comment y parvenir :

  1. Créez une structure customTime anonyme qui intègre le type time.Time.
  2. Implémentez la méthode UnmarshalXML nécessaire dans la structure customTime pour gérer le processus de démarshaling.
  3. Personnalisez la logique d'analyse de date dans UnmarshalXML pour s'adapter au format de date "aaaammjj" utilisé par l'API.
  4. Utilisez la structure customTime pour remplacer le champ time.Time d'origine dans votre structure Transaction.

Voici un exemple de code illustrant cette approche :

type Transaction struct {
    // ... other fields
    DateEntered customTime `xml:"enterdate"` // Use customTime to handle specific date format
}

type customTime struct {
    time.Time
}

func (c *customTime) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    const shortForm = "20060102" // Custom date format: "yyyymmdd"
    var v string
    d.DecodeElement(&v, &start)
    parse, err := time.Parse(shortForm, v)
    if err != nil {
        return err
    }
    *c = customTime{parse}
    return nil
}

En employant cette approche, vous pouvez surmonter la limitation liée à la spécification d'un format de date pendant le processus de démarchage et gérer de manière transparente les dates qui ne sont pas conformes au format par défaut.

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