Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Melaksanakan Pemasaran BSON Tersuai untuk Go Struct?

Bagaimana untuk Melaksanakan Pemasaran BSON Tersuai untuk Go Struct?

Mary-Kate Olsen
Lepaskan: 2024-12-01 17:03:13
asal
443 orang telah melayarinya

How to Implement Custom BSON Marshalling for a Go Struct?

Marshalling BSON Tersuai untuk Struktur Data Tersuai

Dalam Go, pembangun sering menghadapi senario di mana mereka memerlukan fungsi marshalling dan unmarshalling tersuai untuk struktur data yang kompleks. Apabila bekerja dengan BSON, format data binari MongoDB, keperluan untuk marshalling tersuai timbul. Artikel tersebut memperkenalkan konsep mentakrifkan perbarisan BSON tersuai melalui antara muka Getter dan Setter.

Secara khusus, soalan memfokuskan pada cara menulis marshalling BSON tersuai untuk struct Mata Wang yang merangkumi nilai mata wang dan kod mata wang. Kaedah MarshalJSON dan UnmarshalJSON ditunjukkan sebagai pendekatan yang berkesan untuk marshalling dan unmarshalling JSON tersuai. Walau bagaimanapun, mencari dokumentasi tentang BSON marshalling boleh menjadi mencabar.

Untuk mencapai BSON marshalling tersuai, struct Mata Wang mesti melaksanakan antara muka bson.Getter dan bson.Setter. Kaedah GetBSON mengembalikan perwakilan mesra BSON bagi struktur Mata Wang dan kaedah SetBSON menetapkan nilai struktur Mata Wang berdasarkan data BSON yang disediakan. Kod di bawah menunjukkan pelaksanaan ini:

type Currency struct {
    value        decimal.Decimal //The actual value of the currency.
    currencyCode string          //The ISO currency code.
}

// GetBSON implements bson.Getter.
func (c Currency) GetBSON() (interface{}, error) {
    f := c.Value().Float64()
    return struct {
        Value        float64 `json:"value" bson:"value"`
        CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
    }{
        Value:        f,
        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 {
        c.value = decimal.NewFromFloat(decoded.Value)
        c.currencyCode = decoded.CurrencyCode
        return nil
    } else {
        return bsonErr
    }
}
Salin selepas log masuk

Dengan melaksanakan kaedah ini, pembangun kini boleh menggunakan struct Mata Wang dengan lancar dengan MongoDB, membolehkan penggabungan tersuai dan pembongkaran data mata wang.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pemasaran BSON Tersuai untuk Go Struct?. 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