Umgang mit Nullable-Zeitwerten mit Strukturen in Go
Beim Arbeiten mit Datenstrukturen, die Nullable-Zeitwerte enthalten können, ist es wichtig, eine ordnungsgemäße Handhabung sicherzustellen dieser Werte. Betrachten Sie die folgende Struktur:
type Reminder struct { Id int CreatedAt time.Time RemindedAt *time.Time SenderId int ReceiverId int }
Hier wird das RemindedAt-Feld als Zeiger auf eine time.Time deklariert, da es möglicherweise null ist. Diese Unterscheidung erfordert jedoch, dass der Code den Unterschied zwischen CreatedAt und RemindedAt verarbeitet.
Um dieses Problem zu beheben, bietet Go mehrere Ansätze, um nullfähige Zeitwerte elegant zu verarbeiten:
Verwendung von pq.NullTime
Das pq-Paket des PostgreSQL Go-Treibers bietet den Typ pq.NullTime. Es besteht aus einem time.Time-Wert und einem booleschen Valid-Flag, das angibt, ob die Zeit gültig ist (nicht NULL).
import "github.com/lib/pq" type Reminder struct { Id int CreatedAt time.Time RemindedAt pq.NullTime SenderId int ReceiverId int }
In diesem Fall ist RemindedAt ein pq.NullTime-Wert, und der Code kann dies überprüfen sein Valid-Flag, um zu bestimmen, ob die Zeit eingestellt ist.
Verwenden von sql.NullTime (Go 1.13 und oben)
Ab Go 1.13 führt die Standardbibliothek den Typ sql.NullTime ein, der einen ähnlichen Zweck wie pq.NullTime erfüllt.
import "database/sql" type Reminder struct { Id int CreatedAt time.Time RemindedAt sql.NullTime SenderId int ReceiverId int }
Sowohl pq.NullTime als auch sql.NullTime implementiert die erforderlichen Schnittstellen zur Unterstützung des Datenbankscans und der Parameterbindung, sodass sie bequem mit Datenbankoperationen verwendet werden können.
Das obige ist der detaillierte Inhalt vonWie gehe ich am besten mit Nullable-Zeitwerten in Go-Strukturen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!