Typ-Assertion in Go: Auflösen von „Typ-Schalter bei Nicht-Schnittstellenwert nicht möglich“
In Go umfasst die Typ-Assertion die Prüfung, ob ein Wert vorhanden ist gehört zu einem bestimmten Typ. Wenn der Fehler „Schalter bei Nicht-Schnittstellenwert kann nicht eingegeben werden“ auftritt, bedeutet dies, dass der überprüfte Wert keine Schnittstelle ist.
Beachten Sie den folgenden Code:
type Stringer interface { String() string } type Number struct { v int } func (number *Number) String() string { return strconv.Itoa(number.v) } func main() { n := &Number{1} switch v := n.(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
Dieser Code versucht Zum Eingeben schalten Sie den Wert n ein, der vom Typ *Number ist. Dies führt jedoch zu dem Fehler „Schalter bei Nicht-Schnittstellenwert kann nicht eingegeben werden“.
Um dieses Problem zu beheben, müssen wir n in einen Schnittstellenwert umwandeln, bevor wir die Typzusicherung durchführen. Dies liegt daran, dass eine Typumschaltung nur für Schnittstellenwerte durchgeführt werden kann. Der folgende korrigierte Code demonstriert dies:
switch v := interface{}(n).(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") }
Durch die Umwandlung von n in interface{} ermöglichen wir die Durchführung des Typwechsels für den resultierenden Schnittstellenwert. Dadurch können wir erfolgreich prüfen, ob n vom Typ Stringer ist, und die entsprechende Meldung ausgeben.
Das obige ist der detaillierte Inhalt vonWarum wirft Go den Fehler „Schalter kann nicht auf Nicht-Schnittstellenwert eingegeben werden' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!