首頁 > 後端開發 > Golang > 如何避免 Go 中的「Can\t Marshal interface {} as a BSON document」錯誤?

如何避免 Go 中的「Can\t Marshal interface {} as a BSON document」錯誤?

DDD
發布: 2024-11-26 07:02:21
原創
767 人瀏覽過

How to Avoid the

如何在 Go Lang 中建構和傳遞 BSON 文件?

簡介

MongoDB 與二進位 JSON 表示的文件互動(BSON)格式。在 Go 中,建置和傳遞 BSON 文件以插入 MongoDB 可能具有挑戰性。本文將為在此過程中遇到的常見錯誤提供解決方案。

錯誤:Interface{} Cannot Marshal as BSON Document

將BSON 文件傳遞給定義為介面{}的函數參數,可能會出現錯誤:「無法將介面{}編組為BSON文件。

解決方案:使用自訂結構

要解決此問題,請避免使用 interface{}而是定義一個自訂結構來表示 BSON 文件。例如,考慮以下BSON 文件:

{
  "_id": "53439d6b89e4d7ca240668e5",
  "balanceamount": 3,
  "type": "reg",
  "authentication": {
    "authmode": "10",
    "authval": "sd",
    "recovery": {
      "mobile": "sdfsd",
      "email": "email@protected.com"
    }
  },
  "stamps": {
    "in": "x",
    "up": "y"
  }
}
登入後複製

在Go 中,對應的自訂結構將是:

type Account struct {
  Id bson.ObjectId `bson:"_id"`
  BalanceAmount int
  // Other fields...
}
登入後複製

將自訂結構傳遞給插入函數

現在,在dbEngine.go 檔案中,修改Insert函數以接受自訂結構體作為參數:

func Insert(document *Account) {
  // Connect to MongoDB and insert the document
}
登入後複製

在應用程式中的使用

要使用此函數,請建立Account 結構體的實例,填充其字段,並將其傳遞給Insert函數:

acc := Account{
  Id: bson.NewObjectId(),
  BalanceAmount: 3,
  // Other fields...
}

dbEngine.Insert(&acc)
登入後複製

結論

透過建立一個自訂結構體來表示BSON 文件並將其傳遞給接受特定結構體類型的函數,錯誤可以避免了,BSON文檔可以無縫建置和傳遞。

以上是如何避免 Go 中的「Can\t Marshal interface {} as a BSON document」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板