Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengendalikan Lajur Masa Tarikh Boleh Null dengan Cekap dalam Go Structs?
Pengendalian Masa Tarikh dalam Go Structs
Dalam Go, apabila mengisi struct dengan rekod pangkalan data, pengendalian lajur datetime boleh batal boleh menjadi cabaran. Pertimbangkan struct berikut:
type Reminder struct { Id int CreatedAt time.Time RemindedAt *time.Time SenderId int ReceiverId int }
Dalam contoh ini, RemindedAt diwakili sebagai penunjuk untuk mengendalikan nilai nullable. Walau bagaimanapun, pendekatan ini memperkenalkan keperluan untuk membezakan antara nilai bukan nol dan nilai nol dalam kod, yang boleh menyusahkan.
Penyelesaian yang Diperbaiki
Untuk menangani isu ini, Pergi menawarkan jenis pq.NullTime atau sql.NullTime (dalam Go 1.13 ), yang memberikan yang lebih elegan pendekatan:
type Reminder struct { Id int CreatedAt time.Time RemindedAt pq.NullTime // or sql.NullTime SenderId int ReceiverId int }
NullTime mentakrifkan medan berikut:
type NullTime struct { Time time.Time Valid bool // Valid is true if Time is not NULL }
Apabila mengimbas rekod pangkalan data, medan Sah menunjukkan sama ada Masa mempunyai nilai datetime yang sah atau batal.
Penggunaan
Untuk mengimbas baris pangkalan data ke dalam Peringatan struct:
row := db.QueryRow("...") err := row.Scan(&id, &reminder.CreatedAt, &reminder.RemindedAt, &senderId, &receiverId)
Untuk mengakses medan RemindedAt, semak medan Sah:
if reminder.RemindedAt.Valid { // RemindedAt has a valid datetime value } else { // RemindedAt is null }
Pendekatan ini memudahkan pengendalian lajur datetime boleh batal dalam struct Go, menghapuskan keperluan untuk melaksanakan secara manual semakan batal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Lajur Masa Tarikh Boleh Null dengan Cekap dalam Go Structs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!