Heim >Backend-Entwicklung >Golang >Wie tippe ich Assert sicher aus einem Abschnitt von Schnittstellenwerten in Go ein?

Wie tippe ich Assert sicher aus einem Abschnitt von Schnittstellenwerten in Go ein?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-22 06:14:14942Durchsuche

How to Safely Type Assert from a Slice of Interface Values in Go?

Geben Sie „Assertion“ aus einem Segment von Schnittstellenwerten ein

In Go wird versucht, „assertion“ aus einem Segment von Schnittstellenwerten einzugeben, z. B. [] Knoten zu []Symbol, kann zu einem Fehler führen. Während Symbol die Node-Schnittstelle implementiert, ist der Slice []Node kein Schnittstellentyp.

Die Fehlermeldung „ungültige Typzusicherung: args.([]Symbol) (Nicht-Schnittstellentyp []Node auf der linken Seite )“ gibt an, dass das Segment der Schnittstellenwerte ([]Node) nicht direkt auf einen Schnittstellentyp angewendet werden kann ([]Symbol).

Grund

Ein Slice ist ein eindeutiger Nicht-Schnittstellentyp mit einem eigenen Satz von Methoden. Im Gegensatz zu einer Schnittstelle erbt es keine Methoden von den darin enthaltenen Elementen. Daher macht es keinen Sinn anzunehmen, dass ein Abschnitt von Schnittstellenwerten selbst eine Schnittstelle ist.

Lösung

Um in dieser Situation richtig „assertion“ einzugeben, können Sie Folgendes tun: Verwenden Sie eine Schleife, um jedes Element des Slice in den gewünschten Typ umzuwandeln. Zum Beispiel der folgende Code:

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

Erstellt ein neues Segment von Symbolwerten und Symbolen und iteriert über das args-Slice, wobei jedes Element in einen Symboltyp konvertiert wird. Sie können dann Symbole für die weitere Verarbeitung verwenden.

Denken Sie daran, dass Typzusicherungen nur verwendet werden sollten, wenn Sie absolut sicher sind, dass die Behauptung erfolgreich ist. Andernfalls kann es zur Laufzeit zu einer Panik kommen.

Das obige ist der detaillierte Inhalt vonWie tippe ich Assert sicher aus einem Abschnitt 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