Transmission de documents BSON à l'aide de Go
Lorsque vous travaillez avec Go et MongoDB à l'aide du package mgo, il est courant de rencontrer des difficultés lors de la transmission de documents BSON. Cet article aborde l'un de ces problèmes, en se concentrant particulièrement sur la question de savoir s'il faut ou non utiliser l'interface{} pour les documents BSON.
Problème :
Vous avez créé un BSON document, mais lorsque vous essayez de le transmettre à une fonction dans un autre package qui prend le type interface{}, vous rencontrez l'erreur : "panique : impossible de marshaler l'interface {} en tant que BSON document."
Solution :
Votre problème vient du fait que vous ne devriez pas créer vous-même des documents BSON. Au lieu de cela, vous pouvez définir une structure pour représenter le schéma de votre document, puis utiliser le package mgo pour gérer le marshaling et le démarshaling des données BSON.
Dans account.go :
Définissez une structure représentant votre compte :
type Account struct { Id bson.ObjectId `bson:"_id"` BalanceAmount int // Other fields }
Dans dbEngine.go :
Mettez à jour la fonction Insert pour accepter un argument d'interface{} :
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 }
Dans votre application principale :
Créez une instance de la structure Account et insérez-la dans la base de données :
acc := Account{} acc.Id = bson.NewObjectId() acc.BalanceAmount = 3 dbEngine.Insert(&acc)
Cette approche permet à mgo de gérer correctement l'encodage et le décodage des documents BSON, éliminant ainsi le besoin de manipulation manuelle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!