ホームページ > バックエンド開発 > Golang > Go で「インターフェイス {} を BSON ドキュメントとしてマーシャルできません」エラーを回避するにはどうすればよいですか?

Go で「インターフェイス {} を BSON ドキュメントとしてマーシャルできません」エラーを回避するにはどうすればよいですか?

DDD
リリース: 2024-11-26 07:02:21
オリジナル
769 人が閲覧しました

How to Avoid the

Go Lang で BSON ドキュメントを構築して渡す方法

はじめに

MongoDB はバイナリ JSON で表現されたドキュメントと対話します(BSON) 形式。 Go では、MongoDB に挿入するために BSON ドキュメントを構築して渡すのは困難な場合があります。この記事では、このプロセス中に発生する一般的なエラーの解決策を提供します。

エラー: インターフェース{}は BSON ドキュメントとしてマーシャリングできません

BSON ドキュメントを関数パラメータがインターフェイス{}として定義されている場合、「インターフェイス {} を BSON ドキュメントとしてマーシャリングできません」というエラーが発生する可能性があります。このエラーは、Go が任意のインターフェースを BSON ドキュメントとして自動的にマーシャリングできないことを示しています。

解決策: カスタム構造体を使用します

この問題を解決するには、インターフェースの使用を避けてください。{}代わりに、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 に渡します。 function:

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

dbEngine.Insert(&acc)
ログイン後にコピー

結論

BSON ドキュメントを表すカスタム構造体を作成し、それを特定の構造体タイプを受け入れる関数に渡すことで、エラーが発生する可能性があります。回避でき、BSON ドキュメントをシームレスに構築して渡すことができます。

以上がGo で「インターフェイス {} を BSON ドキュメントとしてマーシャルできません」エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート