Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengelakkan Ralat \'Can\'t Marshal interface {} as a BSON document\' in Go?
Pengenalan
MongoDB berinteraksi dengan dokumen yang diwakili dalam Binary JSON (BSON). Dalam Go, membina dan menghantar dokumen BSON untuk dimasukkan ke dalam MongoDB boleh menjadi mencabar. Artikel ini akan memberikan penyelesaian kepada ralat biasa yang dihadapi semasa proses ini.
Ralat: Antara Muka{} Cannot Marshal as BSON Document
Apabila menghantar dokumen BSON ke parameter fungsi yang ditakrifkan sebagai antara muka{}, ralat mungkin berlaku: "Tidak boleh marshal antara muka {} sebagai dokumen BSON." Ralat ini menunjukkan bahawa Go tidak boleh menyusun antara muka sewenang-wenangnya secara automatik sebagai dokumen BSON.
Penyelesaian: Gunakan Struktur Tersuai
Untuk menyelesaikan isu ini, elakkan menggunakan antara muka{} dan sebaliknya tentukan struct tersuai untuk mewakili dokumen BSON. Sebagai contoh, pertimbangkan dokumen BSON berikut:
{ "_id": "53439d6b89e4d7ca240668e5", "balanceamount": 3, "type": "reg", "authentication": { "authmode": "10", "authval": "sd", "recovery": { "mobile": "sdfsd", "email": "email@protected.com" } }, "stamps": { "in": "x", "up": "y" } }
Dalam Go, struct tersuai yang sepadan ialah:
type Account struct { Id bson.ObjectId `bson:"_id"` BalanceAmount int // Other fields... }
Lepasi Struktur Tersuai untuk Memasukkan Fungsi
Sekarang, dalam fail dbEngine.go, ubah suai fungsi Insert untuk menerima struct tersuai sebagai hujah:
func Insert(document *Account) { // Connect to MongoDB and insert the document }
Penggunaan dalam Aplikasi
Untuk menggunakan fungsi ini, buat contoh struct Akaun, isikan medannya dan hantarkannya ke Sisipan fungsi:
acc := Account{ Id: bson.NewObjectId(), BalanceAmount: 3, // Other fields... } dbEngine.Insert(&acc)
Kesimpulan
Dengan mencipta struct tersuai untuk mewakili dokumen BSON dan menghantarnya kepada fungsi yang menerima jenis struct tertentu, ralat boleh dielakkan dan dokumen BSON boleh dibina dan diluluskan dengan lancar.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat \'Can\'t Marshal interface {} as a BSON document\' in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!