Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengisi Medan `created_at` dan `updated_at` secara automatik dalam Go Structs Sebelum Sisipan MongoDB?

Bagaimana untuk Mengisi Medan `created_at` dan `updated_at` secara automatik dalam Go Structs Sebelum Sisipan MongoDB?

Mary-Kate Olsen
Lepaskan: 2024-11-24 19:08:11
asal
196 orang telah melayarinya

How to Automatically Populate `created_at` and `updated_at` Fields in Go Structs Before MongoDB Insertion?

Autofill created_at dan updated_at dalam Go Struct Sebelum Memasukkan ke dalam MongoDB

Apabila memasukkan struct ke dalam koleksi MongoDB menggunakan pemacu MongoDB untuk Go, medan created_at dan updated_at adalah ditetapkan kepada masa sifar (0001-01-01T00:00:00.000 00:00). Ini mungkin bukan tingkah laku yang diingini, terutamanya jika medan ini dijangka menyimpan masa sebenar penciptaan dan pengubahsuaian.

Marshaler Tersuai

Pelayan MongoDB tidak menyokong pengisian automatik create_at dan kemas kini_di medan. Walau bagaimanapun, anda boleh melaksanakan fungsi ini dengan mencipta marshaler tersuai.

Melaksanakan bson.Marshaler

Melaksanakan antara muka bson.Marshaler untuk jenis Pengguna anda. Ini akan membolehkan anda menyesuaikan cara struct dimarshallkan ke dalam BSON sebelum dimasukkan ke dalam pangkalan data.

Kaedah MarshalBSON marshaler tersuai anda harus melakukan langkah berikut:

  1. If CreatedAt ialah sifar, tetapkannya kepada masa semasa.
  2. Tetapkan UpdatedAt kepada semasa masa.
  3. Marshal struct ke dalam BSON menggunakan bson asas. Fungsi Marshal.

Berikut ialah contoh marshaler tersuai:

func (user *User) MarshalBSON() ([]byte, error) {
    if user.CreatedAt.IsZero() {
        user.CreatedAt = time.Now()
    }
    user.UpdatedAt = time.Now()

    type my User
    return bson.Marshal((*my)(user))
}
Salin selepas log masuk

Penggunaan

Untuk menggunakan marshaler tersuai, ingat untuk menggunakannya di mana sahaja anda memasukkan struct Pengguna ke dalam pangkalan data menggunakan Kaedah InsertOne. Anda mesti menghantar penunjuk kepada struct Pengguna sebagai hujah.

Contoh:

user := &User{Name: "username"}

c := client.Database("db").Collection("collection")
if _, err := c.InsertOne(context.Background(), user); err != nil {
    // handle error
}
Salin selepas log masuk

Perhatikan bahawa marshaler tersuai tidak akan berfungsi jika anda membenamkannya ke dalam struct yang lebih besar. Untuk mengelakkan isu ini, anda boleh menggunakan marshaler tersuai untuk keseluruhan struct terbenam sebaliknya.

Atas ialah kandungan terperinci Bagaimana untuk Mengisi Medan `created_at` dan `updated_at` secara automatik dalam Go Structs Sebelum Sisipan MongoDB?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan