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
Susan Sarandonasal
2024-11-08 19:42:02482semak imbas

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"`
}

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"`
}

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)
}

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!

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