Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengendalikan Lajur Masa Tarikh Boleh Null dengan Cekap dalam Go Structs?

Bagaimanakah Saya Boleh Mengendalikan Lajur Masa Tarikh Boleh Null dengan Cekap dalam Go Structs?

DDD
DDDasal
2024-12-19 19:00:21809semak imbas

How Can I Efficiently Handle Nullable Datetime Columns in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn