简介
MongoDB 与二进制 JSON 表示的文档交互(BSON)格式。在 Go 中,构建和传递 BSON 文档以插入 MongoDB 可能具有挑战性。本文将为在此过程中遇到的常见错误提供解决方案。
错误:Interface{} Cannot Marshal as BSON Document
将 BSON 文档传递给定义为接口{}的函数参数,可能会出现错误:“无法将接口{}编组为BSON文档。”此错误表明 Go 无法自动将任意接口编组为 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中文网其他相关文章!