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
Lepaskan: 2024-12-19 19:00:21
asal
854 orang telah melayarinya

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:

1

2

3

4

5

6

7

type Reminder struct {

    Id         int

    CreatedAt  time.Time

    RemindedAt *time.Time

    SenderId   int

    ReceiverId int

}

Salin selepas log masuk

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:

1

2

3

4

5

6

7

type Reminder struct {

    Id         int

    CreatedAt  time.Time

    RemindedAt pq.NullTime // or sql.NullTime

    SenderId   int

    ReceiverId int

}

Salin selepas log masuk

NullTime mentakrifkan medan berikut:

1

2

3

4

type NullTime struct {

    Time  time.Time

    Valid bool // Valid is true if Time is not NULL

}

Salin selepas log masuk

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:

1

2

row := db.QueryRow("...")

err := row.Scan(&id, &reminder.CreatedAt, &reminder.RemindedAt, &senderId, &receiverId)

Salin selepas log masuk

Untuk mengakses medan RemindedAt, semak medan Sah:

1

2

3

4

5

if reminder.RemindedAt.Valid {

    // RemindedAt has a valid datetime value

} else {

    // RemindedAt is null

}

Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan