Go を使用した BSON ドキュメントの受け渡し
mgo パッケージを使用して Go と MongoDB を操作する場合、BSON ドキュメントを渡すときに問題が発生するのが一般的です。この記事では、そのような問題の 1 つについて取り上げ、特に BSON ドキュメントにインターフェースを使用するかどうかの問題に焦点を当てます。
問題:
BSON を作成しました。{}ドキュメントを作成していましたが、そのドキュメントをインターフェイス型を取る別のパッケージ内の関数に渡そうとすると、「パニック: インターフェイス {} を BSON としてマーシャルできません」というエラーが発生します。 document."
解決策:
問題は、BSON ドキュメントを自分で作成すべきではないという事実から生じています。代わりに、ドキュメントのスキーマを表す構造体を定義し、mgo パッケージを使用して BSON データのマーシャリングとアンマーシャリングを処理できます。
account.go:
アカウントを表す構造体を定義します:
type Account struct { Id bson.ObjectId `bson:"_id"` BalanceAmount int // Other fields }
dbEngine.go:
インターフェース引数を受け入れるように Insert 関数を更新します。{}:
func Insert(document interface{}) { // Establish connection, get collection session, err := mgo.Dial("localhost") c := session.DB("db_name").C("collection_name") err = c.Insert(document) // Handle any potential errors }
メイン アプリケーション内:
Account 構造体のインスタンスを作成し、それをデータベース:
acc := Account{} acc.Id = bson.NewObjectId() acc.BalanceAmount = 3 dbEngine.Insert(&acc)
このアプローチにより、mgo は BSON ドキュメントのエンコードとデコードを適切に処理できるようになり、手動処理の必要がなくなります。
以上がGo の BSON ドキュメントには「interface{}」を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。