簡介
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中文網其他相關文章!