Time.Time, eine Struktur in Go, enthält nicht nur Zeitkomponenten (Sekunden und Nanosekunden), sondern auch einen Standortzeiger . Beim Vergleich von Strukturinstanzen über == werden alle Felder untersucht.
Die Go-Spezifikation schreibt Folgendes vor:
Struct values are comparable if all their fields are comparable. Two struct values are equal if their corresponding non-blank fields are equal.
Daher vergleicht t1 == t2 alle Felder, einschließlich der Position, die sind eindeutige Hinweise. Diese Exklusivität gilt, obwohl beide Standorte dieselbe Zeitzone darstellen.
Zur Erinnerung: Die time.Time-Dokumentation warnt davor, Zeitwerte als Bezeichner in Karten oder Datenbanken zu verwenden, ohne konsistente Standorte zu garantieren. Die Lösung liegt in der Verwendung der UTC- oder Local-Methoden, um identische Standortzeiger sicherzustellen.
Alternativ kann man die In()-Methode nutzen, um den gewünschten Standortzeiger festzulegen, wie in der GoSpec gezeigt.
Durch das Setzen äquivalenter Ortszeiger liefern Zeitstrukturen mit identischen Datums- und Zeitkomponenten nun „true“, wenn sie über == verglichen werden. Die Equal()-Methode gibt jedoch unabhängig von den Standorten stets „true“ zurück.
Das obige ist der detaillierte Inhalt vonGo's „time.Time': Warum schlägt „==' beim Zeitvergleich manchmal fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!