Heim >Backend-Entwicklung >Golang >Warum wirft Go den Fehler „Schalter kann nicht auf Nicht-Schnittstellenwert eingegeben werden' aus?

Warum wirft Go den Fehler „Schalter kann nicht auf Nicht-Schnittstellenwert eingegeben werden' aus?

DDD
DDDOriginal
2024-11-17 11:37:02951Durchsuche

Why Does Go Throw a

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!

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