Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Jenis Terbenam dan JSON Marshaling dengan MongoDB dalam 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!