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.
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!