Heim >Backend-Entwicklung >Golang >Wie tippe ich Assert-Slices von Schnittstellenwerten in Go ein?

Wie tippe ich Assert-Slices von Schnittstellenwerten in Go ein?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-07 16:40:13853Durchsuche

How to Type Assert Slices of Interface Values in Go?

Typ Asserting Slices of Interface Values

Beim Versuch, Asserting einen Slice von Interface-Werten einzugeben, kann ein Fehler ähnlich der folgenden auftreten:

invalid type assertion: args.([]Symbol) (non-interface type []Node on left)

Dieser Fehler tritt auf, weil Slices unterschiedliche Nicht-Schnittstellentypen sind. Um zu verstehen, warum, untersuchen wir die Natur von Schnittstellen in Go.

Schnittstellen sind Typen, die eine Reihe von Methoden definieren, die ein Wert implementieren muss. Wenn Sie eine Variable eines Schnittstellentyps erstellen, ist ihr dynamischer Typ nicht festgelegt, sodass sie Werte jedes beliebigen Typs enthalten kann, der die Schnittstelle implementiert.

Ein Slice ist jedoch eine Sammlung von Werten eines bestimmten Typs. das ist固定 von einem Typ. Es verfügt über keine Methoden und ist somit kein Schnittstellentyp. Daher macht es keinen Sinn anzunehmen, dass ein Slice von Schnittstellenwerten auch eine Schnittstelle ist.

Die Lösung

Um diesen Fehler zu beheben, können Sie die Werte im Slice explizit in die gewünschten konvertieren Typ, wie im folgenden Code:

symbols := make([]Symbol, len(args))
for i, arg := range args { symbols[i] = arg.(Symbol) }

Dieser Code erstellt ein neues Segment des gewünschten Typs und durchläuft das ursprüngliche Segment, wobei er jeden Wert in den gewünschten Typ konvertiert. Dadurch können Sie die typzugesicherten Werte in Ihrem Code verwenden, ohne dass der Typzusicherungsfehler auftritt.

Das obige ist der detaillierte Inhalt vonWie tippe ich Assert-Slices von Schnittstellenwerten in Go ein?. 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