Heim >Backend-Entwicklung >Golang >Warum gibt „==' „false' für identische Go-„time.Time'-Strukturen zurück?

Warum gibt „==' „false' für identische Go-„time.Time'-Strukturen zurück?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-17 21:50:16273Durchsuche

Why Does `==` Return `false` for Identical Go `time.Time` Structs?

Warum gibt == für Zeitstrukturen mit identischen Datums- und Uhrzeitangaben den Wert false zurück?

In Go ist time.Time eine Struktur mit Feldern Darstellung von Datum, Uhrzeit und Zeitzone. Beim Vergleich zweier time.Time-Werte mit == ist zu beachten, dass nicht nur Datum und Uhrzeit, sondern auch der Ort verglichen werden.

Der ==-Operator vergleicht alle nicht leeren Felder einer Struktur, einschließlich der Zeiger auf das Standortfeld (*Location). Während zwei Standorte möglicherweise dieselbe Zeitzone darstellen, können sie sich an unterschiedlichen Speicheradressen befinden.

Das führt dazu, dass beim Vergleich zweier time.Time-Werte, die das gleiche Datum und die gleiche Uhrzeit haben, aber an unterschiedlichen Standorten erstellt wurden, dies der Fall ist führt dazu, dass == false zurückgibt, obwohl die Zeitpunkte gleich sind.

Beispiel:

Bedenken Sie Folgendes Code:

import (
    "fmt"
    "time"
)

func main() {
    t1 := time.Date(2016, 4, 14, 1, 30, 30, 222000000, time.UTC)
    t2 := time.Date(2016, 4, 14, 1, 30, 30, 222000000, time.Local)

    fmt.Println(t1.Equal(t2)) // true (compares date and time only)
    fmt.Println(t1 == t2)      // false (also compares location pointers)
}

Hier repräsentieren t1 und t2 den gleichen Zeitpunkt, aber t1 liegt in UTC, während t2 in der lokalen Zeitzone liegt. Beim Vergleich von t1 und t2 mit .Equal(), das den Standort ignoriert, wird true zurückgegeben. Die Verwendung von == führt jedoch aufgrund der unterschiedlichen Standortzeiger zu „false“.

Problemumgehung:

Um Zeit zu vergleichen. Zeitwerte basieren ausschließlich auf Datum und Uhrzeit, der Uhrzeit. Anstelle von == sollte die Methode Equal() verwendet werden. Alternativ können Sie manuell sicherstellen, dass beide time.Time-Werte denselben Standortzeiger verwenden, indem Sie t.In(t.Location()) für sie aufrufen.

Das obige ist der detaillierte Inhalt vonWarum gibt „==' „false' für identische Go-„time.Time'-Strukturen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn