Heim >Backend-Entwicklung >Golang >Wie konvertiere ich Strukturabschnitte mit verschiedenen JSON-Tags in Go?
Typkonvertierung zwischen Struktur-Slices in Go
In Go kann die Typkonvertierung zwischen Struktur-Slices eine Herausforderung sein. Betrachten Sie den folgenden Code:
<code class="go">type Societe struct { Name string } type ListSociete []Societe func loadListSociete(name string) (ListSociete, error) { res := []struct { Name string `json:"a.name"` }{} // ... return ListSociete(res), nil }</code>
Der Versuch, res in eine ListSociete zu konvertieren, schlägt fehl, da diese Typen nicht grundsätzlich austauschbar sind. Während beide eine ähnliche Grundstruktur haben, unterscheiden sie sich durch das Vorhandensein des JSON-Tags in res.
Schlüsselunterscheidung: Tags in Strukturtypen
Die Go-Spezifikation besagt, dass zwei Strukturtypen sind identisch, wenn sie die gleiche Reihenfolge von Feldern, Namen, Typen und Tags haben. Der res-Typ enthält das Tag json:"a.name", das ihn von Societe unterscheidet.
Konvertierungsoptionen
Es gibt zwei Hauptoptionen für die Konvertierung zwischen diesen Typen :
Iteration und Kopieren:
Iterieren Sie jedes Element in res und erstellen Sie eine neue ListSociete, indem Sie das Feld „Name“ von jedem Element kopieren. Diese Methode ist zwar sicher, aber ausführlich und ineffizient.
<code class="go">ls := make(ListSociete, len(res)) for i := 0; i < len(res); i++ { ls[i].Name = res[i].Name }</code>
Unsichere Konvertierung:
Nutzen Sie die gemeinsame zugrunde liegende Datenstruktur, um eine unsichere Konvertierung durchzuführen Typkonvertierung. Dies wird jedoch nicht empfohlen, da es zu unerwarteten Fehlern führen kann.
<code class="go">return *(*ListSociete)(unsafe.Pointer(&res)), nil</code>
Fazit
Typkonvertierung zwischen Slices von Strukturen möglich Dies kann entweder durch Iteration und Kopieren oder durch unsichere Konvertierung erreicht werden. Die Wahl hängt von den Anforderungen und Risiken ab. Es ist wichtig, die Unterschiede zwischen den beteiligten Typen und die möglichen Konsequenzen jedes Konvertierungsansatzes zu verstehen.
Das obige ist der detaillierte Inhalt vonWie konvertiere ich Strukturabschnitte mit verschiedenen JSON-Tags in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!