Heim > Artikel > Backend-Entwicklung > Warum können Sie in Go keine Slices verschiedener Typen konvertieren?
Die Unfähigkeit, Slices unterschiedlicher Typen zu konvertieren, wie im bereitgestellten Code-Snippet veranschaulicht, ist auf die spezifische Typkonvertierung zurückzuführen Regeln, die in der Go-Spezifikation beschrieben sind. Diese Regeln regeln, wann ein nicht konstanter Wert in einen bestimmten Typ konvertiert werden kann.
Keine der Konvertierungsregeln gilt für den Fall, dass Sie versuchen, einen Abschnitt von Bar in einen Abschnitt von Foo umzuwandeln. Während die zugrunde liegenden Typen von Foo und Bar identisch sind, ist dies bei den zugrunde liegenden Typen ihrer jeweiligen Slices nicht der Fall. Dies führt dazu, dass einer Variablen vom Typ []Bar kein []Foo-Wert zugewiesen werden kann.
Verstehen der Basistypen
Es ist wichtig zu beachten, dass der Basiswert Der Typ einer Variablen ist nicht unbedingt derselbe wie der Typ der Variablen selbst. Bei Slices ist der Elementtyp der zugrunde liegende Typ. Während also Foo und Bar denselben zugrunde liegenden Typ haben (Foo), ist dies bei []Foo und []Bar nicht der Fall.
Eine praktische Lösung
Um dieses Problem anzugehen können Sie einen Zwischentyp erstellen, der Bar als Foo bezeichnet. Dieser Ansatz funktioniert, weil der Elementtyp des Slice gleich bleibt. Zum Beispiel:
<code class="go">type Foo struct { A int } type Bar Foo type Foos []Foo type Bars Foos func main() { foos := []Foo{Foo{1}, Foo{2}} bars := Bars(foos) fmt.Println(bars) }</code>
Ausgabe:
[{1} {2}]
Diese Lösung erstellt Slices mit demselben zugrunde liegenden Elementtyp und ermöglicht die Konvertierung zwischen ihnen.
Unsichere Überlegungen
Zur Vorsicht: Obwohl es technisch möglich ist, einen Abschnitt von Foo mithilfe unsicherer Vorgänge als einen Abschnitt von Bar „anzusehen“, umgeht dieser Ansatz jedoch die Typsicherheit. Aus Sicherheits- und Zuverlässigkeitsgründen wird empfohlen, den oben beschriebenen Typ-Aliasing-Ansatz zu verwenden.
Das obige ist der detaillierte Inhalt vonWarum können Sie in Go keine Slices verschiedener Typen konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!