Heim > Backend-Entwicklung > Golang > Wie scanne ich verschachtelte Strukturen effektiv mit SQLX?

Wie scanne ich verschachtelte Strukturen effektiv mit SQLX?

Patricia Arquette
Freigeben: 2024-11-22 09:07:14
Original
395 Leute haben es durchsucht

How to Effectively Scan Nested Structs Using SQLX?

Strukturen in Strukturen: Eine Anleitung zum erweiterten Scannen von SQLX

Bei der Verwendung von SQLX können beim Scannen von Daten in verschachtelte Strukturen Probleme auftreten. Betrachten wir dieses Beispiel:

type Customer struct {
   Id     int    `json:"id" db:"id"`
   Name   string `json:"name" db:"name"`
   Address Address `json:"adress"` // Oops, missing embedded property
}
type Address struct {
   Street string `json:"street" db:"street"`
   City   string `json:"city" db:"city"`
}
Nach dem Login kopieren

Beim Versuch, Daten mit dieser Definition zu scannen, wird dieser Fehler auftreten:

missing destination name street in *models.Customer
Nach dem Login kopieren

Lösung: Embrace Embedded Structs

Der Schlüssel zur Lösung dieses Problems liegt im Verständnis der umfassenden Scanfunktionen von SQLX. Wie aus der Dokumentation hervorgeht, unterstützt es das Einbetten von Strukturen und die Heraufstufung ihrer Felder in die übergeordnete Struktur. Um dies zu erreichen, betten Sie einfach „Adresse“ in „Kunde“ ein:

type Customer struct {
   Id     int    `json:"id" db:"id"`
   Name   string `json:"name" db:"name"`
   Address Address
}
Nach dem Login kopieren

Beachten Sie, dass wir das eigene Datenbank-Tag des Adressfelds entfernt haben, da es keine separate Einheit mehr ist.

Achtung: Reduzieren die JSON-Ausgabe

Durch das Einbetten von Adresse wird jedoch die JSON-Ausgabe der Kundenstruktur reduziert, da sowohl Name als auch Stadt sind nun direkte Grundstücke:

{
    "id": 1,
    "name": "foo",
    "street": "bar",
    "city": "baz"
}
Nach dem Login kopieren

Mögliche Alternativen

Falls dies nicht gewünscht ist, gibt es mehrere alternative Ansätze:

  1. Neuzuordnung: Scannen Sie Daten in ein Map[string]interface{} und ordnen Sie sie mithilfe einer benutzerdefinierten Funktion neu zu Logik.
  2. Schnittstellentypen definieren: Erstellen Sie eine Schnittstelle, die die gewünschte Datenstruktur darstellt, und implementieren Sie sie sowohl mit der Adress- als auch mit der Kundenstruktur.

Das obige ist der detaillierte Inhalt vonWie scanne ich verschachtelte Strukturen effektiv mit SQLX?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage