Heim > Artikel > Backend-Entwicklung > Sollte ich „interface{}“ für BSON-Dokumente in Go verwenden?
Übergabe von BSON-Dokumenten mit Go
Bei der Arbeit mit Go und MongoDB unter Verwendung des mgo-Pakets kommt es häufig zu Problemen bei der Übergabe von BSON-Dokumenten. Dieser Artikel befasst sich mit einem solchen Problem und konzentriert sich insbesondere auf die Frage, ob interface{} für BSON-Dokumente verwendet werden soll oder nicht.
Problem:
Sie haben ein BSON erstellt Dokument, aber wenn Sie versuchen, es an eine Funktion in einem anderen Paket zu übergeben, das den Typ interface{} annimmt, tritt die Fehlermeldung auf: „Panik: Schnittstelle {} kann nicht als BSON gemarshallt werden.“ Dokument.“
Lösung:
Ihr Problem ergibt sich aus der Tatsache, dass Sie BSON-Dokumente nicht selbst erstellen sollten. Stattdessen können Sie eine Struktur definieren, um das Schema Ihres Dokuments darzustellen, und dann das MGO-Paket verwenden, um das Marshalling und Unmarshaling von BSON-Daten zu verwalten.
In account.go:
Definieren Sie eine Struktur, die Ihr Konto darstellt:
type Account struct { Id bson.ObjectId `bson:"_id"` BalanceAmount int // Other fields }
In dbEngine.go:
Aktualisieren Sie die Einfügefunktion, um ein Interface{}-Argument zu akzeptieren:
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 }
In Ihrer Hauptanwendung:
Erstellen Sie eine Instanz der Account-Struktur und fügen Sie sie in die Datenbank ein:
acc := Account{} acc.Id = bson.NewObjectId() acc.BalanceAmount = 3 dbEngine.Insert(&acc)
Dieser Ansatz ermöglicht es mgo, die korrekt zu verarbeiten Kodierung und Dekodierung von BSON-Dokumenten, sodass keine manuelle Bearbeitung erforderlich ist.
Das obige ist der detaillierte Inhalt vonSollte ich „interface{}“ für BSON-Dokumente in Go verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!