Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengendalikan Jenis Terbenam dan JSON Marshaling dengan MongoDB dalam Go?

Bagaimana untuk Mengendalikan Jenis Terbenam dan JSON Marshaling dengan MongoDB dalam Go?

Susan Sarandon
Lepaskan: 2024-11-08 19:42:02
asal
531 orang telah melayarinya

How to Handle Embedded Types and JSON Marshaling with MongoDB in Go?

Jenis Terbenam dan JSON Marshaling dalam Go with MongoDB

Dalam MongoDB, jenis terbenam ialah cara biasa untuk mewakili struktur data hierarki. Walau bagaimanapun, apabila menggunakan pengekod JSON Go dengan jenis terbenam, adalah penting untuk mempertimbangkan cara medan yang ditinggalkan dikendalikan.

Andaikan anda mempunyai struct Pengguna dengan medan Rahsia beranotasi dengan json:"-" untuk mengecualikannya daripada JSON biasa maklum balas. Untuk mengembalikan medan rahsia untuk pengguna pentadbir, anda mungkin tergoda untuk mencipta struct AdminUser yang berasingan dengan medan Rahsia pendua. Walau bagaimanapun, pendekatan ini menduplikasi kod dan boleh membawa kepada isu penyelenggaraan.

Sebaliknya, pertimbangkan untuk menggunakan teg bson:",inline" untuk medan Pengguna dalam adminUser. Ini mengarahkan pengekod JSON untuk menyelaraskan medan struct terbenam, dengan berkesan menggabungkannya ke dalam satu objek JSON.

type adminUser struct {
    User  `bson:",inline"`
    Secret string `json:"secret,omitempty" bson:"secret,omitempty"`
}
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini boleh memperkenalkan ralat kunci pendua apabila membaca daripada MongoDB, sebagai adminUser dan Pengguna mengandungi medan Rahsia. Untuk menyelesaikan masalah ini, alih keluar medan Rahsia daripada Pengguna dan hanya ada dalam adminUser.

type User struct {
    Id   bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"`
    Name string        `json:"name,omitempty" bson:"name,omitempty"`
}

type adminUser struct {
    User  `bson:",inline"`
    Secret string `json:"secret,omitempty" bson:"secret,omitempty"`
}
Salin selepas log masuk

Sekarang, apabila mendapatkan semula pengguna dengan pengguna pentadbir, medan rahsia akan disertakan dalam respons JSON.

func getUser(w http.ResponseWriter, r *http.Request) {
    ....omitted code...

    var user adminUser
    err := common.GetDB(r).C("users").Find(
        bson.M{"_id": userId},
    ).One(&user)
    if err != nil {
        return
    }
    common.ServeJSON(w, &user)
}
Salin selepas log masuk

Pendekatan ini mengekalkan satu sumber kebenaran untuk struct Pengguna dan membolehkan anda memasukkan atau mengecualikan medan rahsia secara dinamik berdasarkan kebenaran pengguna.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Jenis Terbenam dan JSON Marshaling dengan MongoDB dalam Go?. 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