Warum gibt mein Go-Code den Fehler „Schalter kann bei Nicht-Schnittstellenwert nicht eingegeben werden' aus?

Mary-Kate Olsen
Freigeben: 2024-11-10 15:15:02
Original
372 Leute haben es durchsucht

Why does my Go code throw a

Typschalterfehler verstehen

In Go führt die Verwendung eines Typschalters für eine Nicht-Schnittstellenvariable zu der Fehlermeldung „Typschalter kann nicht aktiviert werden“. Nicht-Schnittstellenwert. Um dieses Problem zu beheben, muss die Variable in einen geeigneten Schnittstellentyp umgewandelt werden, bevor der Typwechsel durchgeführt wird.

Im angegebenen Beispiel versucht der Code, einen Typwechsel für die Variable n durchzuführen, bei der es sich um eine Instanz handelt der Zahlenstruktur. Allerdings implementiert die Number-Struktur keine Schnittstelle und kann daher nicht direkt in einem Typwechsel verwendet werden.

Fehler beheben

Um den Fehler zu beheben, müssen Sie Folgendes tun Wandeln Sie zunächst n in den Typ interface{} um, der eine leere Schnittstelle darstellt. Dadurch wird n in einen Wert umgewandelt, der jeden Typ enthalten kann. Anschließend können Sie innerhalb des Typwechsels den tatsächlichen Typ des zugrunde liegenden Werts mithilfe des Schlüsselworts type bestätigen.

So würde der korrigierte Code aussehen:

import (
  "fmt"
  "strconv"
)

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 := interface{}(n).(type) {
  case Stringer:
    fmt.Println("Stringer:", v)
  default:
    fmt.Println("Unknown")
  }
}
Nach dem Login kopieren

Mit dieser Änderung wird der Code gibt erfolgreich „Stringer: 1“ aus.

Das obige ist der detaillierte Inhalt vonWarum gibt mein Go-Code den Fehler „Schalter kann bei Nicht-Schnittstellenwert nicht eingegeben werden' aus?. 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