Warum Sie Slice-Typen nicht konvertieren können
Beim Versuch, ein Slice eines Typs in einen anderen zu konvertieren, wie im bereitgestellten Codesegment , Go löst einen Fehler aus. Dieser Fehler ist auf bestimmte Typkonvertierungsregeln zurückzuführen, die in der Go-Spezifikation definiert sind.
Der Fehler tritt auf, weil der zugrunde liegende Typ eines Slice nicht direkt mit dem zugrunde liegenden Typ seiner Elemente zusammenhängt. Während die zugrunde liegenden Typen von Foo und Bar identisch sind, unterscheiden sich die zugrunde liegenden Typen von Slices, die Foo- und Bar-Elemente enthalten.
Gemäß den Zuweisungsregeln von Go kann ein Wert vom Typ []Foo nicht einer Variablen vom Typ zugewiesen werden []Bar. Diese Diskrepanz führt zu einem Konvertierungsfehler.
Um dieses Problem zu beheben, kann die Konvertierung über eine Zwischendatenstruktur erfolgen. Beispielsweise funktioniert der folgende Code:
<code class="go">type Foo struct{ A int } type Bars []Foo func main() { foos := []Foo{Foo{1}, Foo{2}} bars := Bars(foos) fmt.Println(bars) } </code>
Ausgabe:
[{1} {2}]
Darüber hinaus kann die Verwendung des unsicheren Pakets Typsicherheitsprüfungen umgehen und die Konvertierung ermöglichen. Das unsichere Paket sollte jedoch mit Vorsicht und nur in Ausnahmefällen verwendet werden, in denen Leistung und Komplexität im Vordergrund stehen.
Das obige ist der detaillierte Inhalt vonWarum kann ich in Go nicht direkt zwischen Slices verschiedener Elementtypen konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!