Typkonvertierung zwischen Struktur-Slices in Go
Bei der Arbeit mit Struktur-Slices in Go ist es wichtig, die Unterschiede zwischen verschiedenen zu verstehen Typen. In diesem Fall haben wir die folgenden Typen:
Frage 1: Sind []struct{Name string} und []struct{Name string json:"a.name" } unterschiedlich?
Ja, sie unterscheiden sich aufgrund des JSON-Tags json:"a.name". In den Go-Spezifikationen heißt es eindeutig, dass zwei Strukturtypen nur dann identisch sind, wenn sie dieselben Felder, Namen, Typen, und-Tags haben.
Frage 2: Unterscheidet sich ListSociete von []struct{Name string}?
Ja, sie unterscheiden sich, weil ListSociete benutzerdefiniert ist Typ, während []struct{Name string} ein anonymer Typ ist. Sie haben auch unterschiedliche Feldnamen.
_Lösung:
Für die Konvertierung zwischen diesen Typen gibt es zwei Möglichkeiten:
Option 1: Kopieren durch Iteration
Diese Methode ist sicher und zuverlässig, erfordert jedoch explizite Kopieren:
<code class="go">ls := make(ListSociete, len(res)) for i := 0; i < len(res); i++ { ls[i].Name = res[i].Name } return ls, nil</code>
Option 2: Unsichere Konvertierung
Diese unsichere Methode konvertiert direkt die zugrunde liegende Datenstruktur:
<code class="go">return *(*ListSociete)(unsafe.Pointer(&res)), nil</code>
Diese Methode sollte mit Vorsicht angewendet werden, da sie unerwartete Folgen haben kann Verhalten.
_Spielplatzbeispiel: http://play.golang.org/p/lfk7qBp2Gb
Das obige ist der detaillierte Inhalt vonSo konvertieren Sie sicher zwischen Struktursegmenten in Go: Ein Leitfaden zur Typkonvertierung und Best Practices. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!