Heim > Backend-Entwicklung > Golang > Warum können Sie in Go keine Slices verschiedener Typen konvertieren?

Warum können Sie in Go keine Slices verschiedener Typen konvertieren?

DDD
Freigeben: 2024-10-31 16:40:30
Original
802 Leute haben es durchsucht

Why Can't You Convert Slices of Different Types in Go?

Warum können Sie Slice-Typen nicht 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>
Nach dem Login kopieren

Ausgabe:

[{1} {2}]
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage