Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyesuaikan Marshaling/Unmarshaling untuk Jenis MongoDB dalam Go?

Bagaimana untuk Menyesuaikan Marshaling/Unmarshaling untuk Jenis MongoDB dalam Go?

DDD
DDDasal
2024-11-15 02:05:03505semak imbas

How to Customize Marshaling/Unmarshaling for MongoDB Types in Go?

Menyesuaikan Marshaling/Unmarshaling untuk Jenis MongoDB dalam Go

Apabila mengakses MongoDB daripada Go, anda mungkin menghadapi situasi di mana nilai perlu diubah semasa marshaling/unmarshaling. Pertimbangkan kes mengakses medan EndDate yang disimpan sebagai rentetan dalam MongoDB, tetapi anda memerlukannya sebagai Go time.Time type.

Untuk menangani senario sedemikian, anda boleh melaksanakan logik marshaling/unmarshaling tersuai menggunakan bson. Antara muka Getter dan bson.Setter. Berikut ialah panduan langkah demi langkah:

  1. Perluas Struktur Data: Lanjutkan jenis clientConfigData dengan menambah medan jenis masa baharu. Masa, dilambangkan dengan tag bson bagi "-".
type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"`
}
  1. Laksanakan Tersuai Marshaling/Unmarshaling: Cipta kaedah SetBSON() dan GetBSON() untuk mengendalikan marshaling/unmarshaling tersuai.
const endDateLayout = "2006-01-02 15:04:05" // Specify your preferred date layout

func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) {
    type my clientConfigData
    if err = raw.Unmarshal((*my)(c)); err != nil {
        return
    }
    c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr)
    return
}

func (c *clientConfigData) GetBSON() (interface{}, error) {
    c.EndDateStr = c.EndDate.Format(endDateLayout)
    type my *clientConfigData
    return my(c), nil
}

Dalam SetBSON(), isikan struct dengan nilai mentah MongoDB dan huraikan EndDateStr menjadi satu masa.Masa. Dalam GetBSON(), tetapkan EndDateStr dan kembalikan.

  1. Gunakan Custom Marshaling/Unmarshaling:

Apabila mencari atau memasukkan dokumen, ingat untuk menggunakan logik marshaling/unmarshaling tersuai dengan menyatakan clientConfigData type.

var configRes = new(clientConfigData)
err := clientDB.
    C(clientConfigCollection).
    Find(bson.M{}).
    One(&configRes)
if err != nil {
    return nil, errors.Wrap(err, "finding config collection")
}

Dengan melaksanakan marshaling/unmarshaling tersuai, anda boleh bekerja dengan lancar dengan nilai MongoDB yang memerlukan penukaran jenis tertentu. Ingat untuk mengendalikan kedua-dua SetBSON() dan GetBSON() untuk meliputi kedua-dua marshalling dan unmarshalling.

Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Marshaling/Unmarshaling untuk Jenis MongoDB dalam Go?. 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