Tetapkan Tarikh Lalai Apabila Memasukkan Dokumen dengan Masa. Medan Masa
Dalam mongoose, menetapkan nilai lalai untuk medan Tarikh adalah mudah, tetapi dalam Go menggunakan mgo, perkara agak berbeza.
Mengapa Anda Tidak Boleh Tetapkan Nilai Lalai untuk Medan dalam Go?
Go tidak membenarkan nilai lalai untuk medan. Selepas penciptaan, mereka akan mempunyai nilai sifar jenis mereka.
Penyelesaian 1: Fungsi Seperti Pembina
Satu pendekatan ialah mencipta fungsi seperti pembina yang memulakan medan CreatedAt. Walau bagaimanapun, ia tidak mengendalikan kes di mana cap masa perlu sepadan dengan cap masa pangkalan data.
Penyelesaian 2: Logik Marshaling Tersuai
Penyelesaian yang lebih baik melibatkan pelaksanaan bson tersuai. Logik pengambil.
GetBSON() Fungsi
Fungsi GetBSON() dalam pelaksanaan Go menyediakan nilai untuk disimpan. Dalam kes ini, kami ingin menetapkan medan CreatedAt kepada masa semasa sebelum menyimpan.
func (u *User) GetBSON() (interface{}, error) { u.CreatedAt = time.Now() type my *User return my(u), nil }
Mencipta Jenis Baharu
Perhatikan bahawa jenis baharu, saya , dicipta dan dikembalikan untuk mengelakkan pengulangan yang tidak berkesudahan.
Mengendalikan Sedia Ada Rekod
Menambah semakan memastikan bahawa medan CreatedAt hanya ditetapkan jika ia adalah nilai sifar, mengelakkan tiruan pada rekod sedia ada:
func (u *User) GetBSON() (interface{}, error) { if u.CreatedAt.IsZero() { u.CreatedAt = time.Now() } type my *User return my(u), nil }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan Tarikh dan Masa Lalai untuk Medan dalam Dokumen Go Mongoose?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!