はじめに
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 サイトの他の関連記事を参照してください。