Heim >Backend-Entwicklung >Golang >Wie vermeide ich den Fehler „Can\'t Marshal interface {} as a BSON document' in Go?
Einführung
MongoDB interagiert mit Dokumenten, die in binärem JSON dargestellt werden (BSON)-Format. In Go kann das Erstellen und Übergeben von BSON-Dokumenten zum Einfügen in MongoDB eine Herausforderung sein. Dieser Artikel bietet eine Lösung für den häufigen Fehler, der während dieses Prozesses auftritt.
Der Fehler: Interface{} kann nicht als BSON-Dokument gemarshallt werden
Bei der Übergabe eines BSON-Dokuments an Wenn Sie einen als Schnittstelle {} definierten Funktionsparameter verwenden, kann ein Fehler auftreten: „Schnittstelle {} kann nicht als BSON-Dokument gemarshallt werden.“ Dieser Fehler weist darauf hin, dass Go eine beliebige Schnittstelle nicht automatisch als BSON-Dokument bereitstellen kann.
Lösung: Verwenden Sie eine benutzerdefinierte Struktur
Um dieses Problem zu beheben, vermeiden Sie die Verwendung von interface{} und definieren Sie stattdessen eine benutzerdefinierte Struktur zur Darstellung des BSON-Dokuments. Betrachten Sie beispielsweise das folgende BSON-Dokument:
{ "_id": "53439d6b89e4d7ca240668e5", "balanceamount": 3, "type": "reg", "authentication": { "authmode": "10", "authval": "sd", "recovery": { "mobile": "sdfsd", "email": "email@protected.com" } }, "stamps": { "in": "x", "up": "y" } }
In Go wäre die entsprechende benutzerdefinierte Struktur:
type Account struct { Id bson.ObjectId `bson:"_id"` BalanceAmount int // Other fields... }
Übergeben Sie die benutzerdefinierte Struktur an die Einfügefunktion
Ändern Sie nun in der Datei dbEngine.go die Funktion Einfügen, um die benutzerdefinierte Struktur als zu akzeptieren Argument:
func Insert(document *Account) { // Connect to MongoDB and insert the document }
Verwendung in der Anwendung
Um diese Funktion zu verwenden, erstellen Sie eine Instanz der Account-Struktur, füllen Sie ihre Felder und übergeben Sie sie an die Einfügung Funktion:
acc := Account{ Id: bson.NewObjectId(), BalanceAmount: 3, // Other fields... } dbEngine.Insert(&acc)
Fazit
Durch Erstellen einer benutzerdefinierten Struktur für Wenn Sie das BSON-Dokument repräsentieren und es an eine Funktion übergeben, die den spezifischen Strukturtyp akzeptiert, kann der Fehler vermieden werden und BSON-Dokumente können nahtlos erstellt und übergeben werden.
Das obige ist der detaillierte Inhalt vonWie vermeide ich den Fehler „Can\'t Marshal interface {} as a BSON document' in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!