Marshaling BSON Tersuai
Marshaling BSON tersuai adalah serupa dengan marshaling JSON tersuai, tetapi anda perlu melaksanakan bson.Getter dan bson .Setter antara muka sebaliknya. Antara muka ini membolehkan anda mentakrifkan cara jenis tersuai anda harus ditukar kepada dan daripada data BSON.
Sebagai contoh, katakan anda mempunyai jenis Mata Wang yang memerlukan marshaling tersuai:
package yourpackage import ( "context" "errors" "github.com/globalsign/mgo/bson" "github.com/shopspring/decimal" ) type Currency struct { Value decimal.Decimal CurrencyCode string } func (c Currency) GetBSON() (interface{}, error) { if c.CurrencyCode == "" { return nil, errors.New("CurrencyCode cannot be empty") } return bson.M{ "value": c.Value.String(), "currencyCode": c.CurrencyCode, }, nil } func (c *Currency) SetBSON(raw bson.Raw) error { var m bson.M if err := raw.Unmarshal(&m); err != nil { return err } val, ok := m["value"] if !ok { return errors.New("missing 'value' field in BSON data") } c.Value, _ = decimal.NewFromString(val.(string)) code, ok := m["currencyCode"] if !ok { return errors.New("missing 'currencyCode' field in BSON data") } c.CurrencyCode, _ = code.(string) return nil }
Dengan pelaksanaan ini, anda kini boleh mendaftarkan jenis Mata Wang tersuai anda dengan MGO BSON pengekod:
session := mgo.Dial("mongodb://localhost:27017") defer session.Close() session.SetCollectionValidator("products",{ "validator":{ "$jsonSchema":{ "bsonType":"object", "required":["name","code","price"], "properties":{ "name":{"bsonType":"string"}, "code":{"bsonType":"string"}, "price":{ "bsonType":"object", "required":["value", "currencyCode"], "properties":{ "value":{"bsonType":"string", "pattern":"^[0-9,]+(.[0-9,]+)?$"}, "currencyCode":{"bsonType":"string", "enum":["USD", "EUR", "GBP"]}, }, }, } } } }) collection := session.DB("products").C("products")
Kini, apabila anda menyimpan dokumen dengan medan Mata Wang ke MongoDB, pengekod MGO secara automatik akan menggunakan fungsi marshaling tersuai anda untuk menukar Mata Wang kepada BSON.
Perhatikan bahawa ini hanyalah satu contoh bagaimana anda boleh menambah marshaling tersuai untuk jenis BSON. Pelaksanaan khusus akan berbeza-beza bergantung pada keperluan aplikasi tertentu anda.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan BSON Marshaling Tersuai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!