Heim >Backend-Entwicklung >Golang >Wie vermeide ich den Fehler „Can\'t Marshal interface {} as a BSON document' in Go?

Wie vermeide ich den Fehler „Can\'t Marshal interface {} as a BSON document' in Go?

DDD
DDDOriginal
2024-11-26 07:02:21720Durchsuche

How to Avoid the

Wie erstellt und übergibt man BSON-Dokumente in Go Lang?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn