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:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
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.
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!