首页 > 后端开发 > 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
原创
738 人浏览过

How to Avoid the

如何在 Go Lang 中构造和传递 BSON 文档?

简介

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板