Avatar ·

Was ist der Nullwert (zero value) von time.Time in Go und wie überprüft man, ob eine Zeitvariable leer ist?

Hallo zusammen! Ich habe gerade angefangen, Go zu lernen, und bin auf eine unklare Situation bei der Arbeit mit dem Typ time.Time gestoßen.

Ich habe eine Struktur zum Speichern von Benutzerdaten:

type User struct {
    ID        int
    Name      string
    CreatedAt time.Time
    UpdatedAt time.Time
}

Wenn ich einen neuen Benutzer ohne explizite Zeitangabe erstelle, erwarte ich, dass die Felder CreatedAt und UpdatedAt null oder nil sind, wie in anderen Sprachen (Java, C#). Aber in Go kann ich ihnen kein nil zuweisen – der Compiler meckert.

Ich habe es so versucht:

var u User
fmt.Println(u.CreatedAt) // Gibt aus: 0001-01-01 00:00:00 +0000 UTC
fmt.Println(u.CreatedAt == nil) // Compilerfehler: cannot convert nil to type time.Time

Fragen:

  1. Was ist der Standardwert (zero value) von time.Time?
  2. Warum ist das nicht nil?
  3. Wie