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:
- Was ist der Standardwert (zero value) von
time.Time? - Warum ist das nicht
nil? - Wie