Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencapai Custom BSON Marshaling dalam Go, Sama seperti Custom JSON Marshaling?

Bagaimana untuk Mencapai Custom BSON Marshaling dalam Go, Sama seperti Custom JSON Marshaling?

Patricia Arquette
Patricia Arquetteasal
2024-12-01 06:44:09797semak imbas

How to Achieve Custom BSON Marshaling in Go, Similar to Custom JSON Marshaling?

Marshaling BSON Tersuai: Setara untuk Marshaling JSON Tersuai

Untuk mencapai marshaling BSON tersuai, serupa dengan marshaling JSON tersuai yang ditunjukkan dengan struct Mata Wang , anda boleh menggunakan antara muka bson.Getter dan bson.Setter. Antara muka ini membenarkan penyesuaian cara nilai dikodkan dan dinyahkod dalam format BSON.

Melaksanakan Pengambil dan Penetap BSON Tersuai

Struktur Mata Wang boleh dikemas kini untuk melaksanakan bson.Getter dan bson.Setter antara muka sebagai berikut:

// Currency struct implements bson.Getter and bson.Setter
type Currency struct {
    value        decimal.Decimal
    currencyCode string
}

// GetBSON implements bson.Getter.
func (c Currency) GetBSON() (interface{}, error) {
    value := c.Value().Float64()
    return struct {
        Value        float64 `json:"value" bson:"value"`
        CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
    }{
        Value:        value,
        CurrencyCode: c.CurrencyCode(),
    }, nil
}

// SetBSON implements bson.Setter.
func (c *Currency) SetBSON(raw bson.Raw) error {
    decoded := new(struct {
        Value        float64 `json:"value" bson:"value"`
        CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
    })

    bsonErr := raw.Unmarshal(decoded)
    if bsonErr != nil {
        return bsonErr
    }

    c.value = decimal.NewFromFloat(decoded.Value)
    c.currencyCode = decoded.CurrencyCode
    return nil
}

Menggunakan Custom BSON Marshaling dalam Induk Structs

Setelah struct Mata Wang dikemas kini, serupa dengan custom JSON marshaling, struct Produk yang membenamkan Medan mata wang secara automatik akan menggunakan marshaling tersuai apabila memanggil mgo.Marshal atau bson.Encode. Output BSON akan mengandungi nama medan dan nilai data yang dikehendaki tanpa memerlukan struct berasingan dengan medan yang dieksport.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Custom BSON Marshaling dalam Go, Sama seperti Custom JSON Marshaling?. 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