Heim > Backend-Entwicklung > Golang > Warum erhalte ich in Golang die Fehlermeldung „Switch on Non-Interface Value kann nicht eingegeben werden'?

Warum erhalte ich in Golang die Fehlermeldung „Switch on Non-Interface Value kann nicht eingegeben werden'?

Susan Sarandon
Freigeben: 2024-11-13 04:40:02
Original
946 Leute haben es durchsucht

Why Do I Get the

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)
}
Nach dem Login kopieren

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")
    }
}
Nach dem Login kopieren

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")
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage