Menetapkan Tarikh Lalai pada Sisipan Dokumen dengan Masa. Medan Masa dalam Go
Dalam Go, tidak seperti Mongoose dalam Node.js, nilai lalai tidak boleh diberikan kepada medan dalam definisi struct. Untuk mencapai hasil yang sama, terdapat berbilang pendekatan yang tersedia.
Satu kaedah adalah untuk mencipta fungsi seperti pembina yang membuat instantiate struct baharu dan menetapkan medan CreatedAt kepada masa semasa. Fungsi ini kemudiannya boleh digunakan untuk mencipta pengguna baharu, memastikan medan ditetapkan secara konsisten.
func NewUser() *User { return &User{ CreatedAt: time.Now(), } }
Walau bagaimanapun, pendekatan ini mempunyai had kerana ia memerlukan pematuhan ketat untuk menggunakan fungsi ini untuk mencipta pengguna baharu dan tidak menangkap cap masa bagi sisipan dokumen.
Penyelesaian yang lebih serba boleh melibatkan pelaksanaan logik marshaling tersuai dengan melaksanakan bson.Getter antara muka. Kaedah GetBSON() membenarkan pengubahsuaian nilai yang disimpan dalam pangkalan data.
type User struct { CreatedAt time.Time `json:"created_at" bson:"created_at"` } func (u *User) GetBSON() (interface{}, error) { if u.CreatedAt.IsZero() { u.CreatedAt = time.Now() } type my *User return my(u), nil }
Kaedah ini menyemak sama ada medan CreatedAt kosong dan menetapkannya kepada masa semasa jika ada. Ia juga mengelakkan limpahan tindanan dengan mengembalikan jenis baharu yang tidak melaksanakan antara muka bson.Getter.
Pendekatan ini memastikan bahawa medan CreatedAt dikemas kini secara automatik apabila dokumen disimpan, tanpa menulis gantinya jika medan sudah mengandungi suatu nilai. Ia memberikan fleksibiliti yang lebih besar dan selaras dengan kelakuan yang dijangkakan untuk menetapkan nilai lalai semasa memasukkan dokumen.
Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Tarikh dan Masa Lalai pada Sisipan Dokumen dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!