Fehler: „Switch on Non-Interface Value kann nicht eingegeben werden“ in Golang
Beim Arbeiten mit Typzusicherungen kann der Fehler „ Schalter kann nicht eingegeben werden, wenn es sich nicht um einen Schnittstellenwert handelt. Dies tritt auf, wenn versucht wird, einen Typwechsel für einen Wert durchzuführen, der keine Schnittstelle ist.
In Golang können Sie mit dem Typwechsel Code basierend auf dem Typ einer Variablen bedingt ausführen. Allerdings muss es sich bei der Variablen um einen Schnittstellentyp handeln. Eine Schnittstelle stellt einen Vertrag dar, der eine Reihe von Methoden definiert, die ein implementierender Typ implementieren muss.
Im bereitgestellten Codeausschnitt wird ein Typ namens Stringer mit einer einzelnen String()-Methode definiert. Der Number-Typ implementiert auch die String()-Methode und ist damit eine konkrete Implementierung der Stringer-Schnittstelle.
type Stringer interface { String() string } type Number struct { v int } func (number *Number) String() string { return strconv.Itoa(number.v) }
Der Fehler tritt jedoch in der Hauptfunktion auf, wo ein Typwechsel für die Variable n versucht wird , das vom Typ *Number und nicht vom Typ Stringer ist.
func main() { n := &Number{1} switch v := n.(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
Um dieses Problem zu beheben, müssen Sie n in interface{} umwandeln, bevor Sie die Typzusicherung durchführen. Dies liegt daran, dass interface{} jeden beliebigen Wert darstellen kann.
func main() { n := &Number{1} switch v := interface{}(n).(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
Durch die Umwandlung von n in interface{} ermöglichen Sie dem Typschalter im Wesentlichen, die Möglichkeit zu berücksichtigen, dass n vom Typ Stringer sein könnte. Sobald der Typwechsel eingegeben ist, kann der tatsächliche Typ von n ermittelt und der entsprechende Fallzweig ausgeführt werden.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Golang die Fehlermeldung „Switch on Non-Interface Value kann nicht eingegeben werden'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!