Sortie inattendue avec un alias de type horaire personnalisé
Lorsque vous essayez de désorganiser un alias de type horaire personnalisé, le résultat obtenu peut être inattendu. Considérez le code suivant :
<code class="go">type Time time.Time func main() { // Simplified unmarshal code for brevity st := Time(time.Parse(time.RFC3339, "2021-05-21T03:10:20.958450Z")) fmt.Printf("%v\n", st) }</code>
En attendant l'heure formatée, la sortie affiche à la place ce qui suit :
&{958450000 63757163420 <nil>}
Cause fondamentale
Le problème réside dans l'implémentation manquante de fmt.Stringer pour le type Time. Par défaut, fmt utilise sa propre logique de formatage, qui affiche les champs de l'heure sous-jacente. Valeur de l'heure entre accolades.
Solutions
Pour résoudre ce problème, il existe deux options :
Ajouter une méthode String à votre type Time qui délègue à la méthode String de time.Time :
<code class="go">func (t Time) String() string { return time.Time(t).String() }</code>
Modifiez le type d'heure pour intégrer time.Time au lieu de l'alias. Cela héritera automatiquement de la méthode String et de toutes les autres méthodes de time.Time :
<code class="go">type Time struct { time.Time }</code>
Améliorations supplémentaires
<code class="go">func (st *Time) UnmarshalJSON(b []byte) error { var s string if err := json.Unmarshal(b, &s); err != nil { return err } t, err := time.ParseInLocation("2006-01-02T15:04:05", s, time.UTC) if err != nil { return err } *st = Time(t) return nil }</code>
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!