Maison >développement back-end >Golang >« time.Time » de Go : pourquoi `==` échoue-t-il parfois lors de la comparaison des temps ?
Time.Time, une structure en Go, héberge non seulement des composants temporels (secondes et nanosecondes) mais également un pointeur de localisation . En comparant les instances de structure via ==, tous les champs sont sujets à examen.
La Go Spec dicte :
Struct values are comparable if all their fields are comparable. Two struct values are equal if their corresponding non-blank fields are equal.
Par conséquent, t1 == t2 compare tous les champs, y compris l'emplacement, qui sont des indicateurs distincts. Cette exclusivité est valable même si les deux emplacements représentent le même fuseau horaire.
Pour rappel, la documentation time.Time met en garde contre l'utilisation de valeurs Time comme identifiants dans des cartes ou des bases de données sans garantir des emplacements cohérents. La solution réside dans l'utilisation des méthodes UTC ou Local pour garantir des pointeurs de localisation identiques.
Alternativement, on peut utiliser la méthode In() pour établir le pointeur de localisation souhaité, comme démontré dans la GoSpec.
En définissant des pointeurs d'emplacement équivalents, les structures temporelles avec des composants de date et d'heure identiques donneront désormais vrai lorsqu'elles seront comparées via ==. Cependant, la méthode Equal() retournera systématiquement true quels que soient les emplacements.
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!