Heim >Backend-Entwicklung >Golang >Wie konvertiere ich Strukturabschnitte mit verschiedenen JSON-Tags in Go?

Wie konvertiere ich Strukturabschnitte mit verschiedenen JSON-Tags in Go?

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 18:06:30800Durchsuche

How to Convert Slices of Structs with Different 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 :

  1. 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>
  2. 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!

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