Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengelakkan Ralat \'Can\'t Marshal interface {} as a BSON document\' in Go?

Bagaimana untuk Mengelakkan Ralat \'Can\'t Marshal interface {} as a BSON document\' in Go?

DDD
DDDasal
2024-11-26 07:02:21819semak imbas

How to Avoid the

Bagaimana untuk Membina dan Lulus Dokumen BSON dalam Go Lang?

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!

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