Heim >Backend-Entwicklung >Golang >Wie können mehrere Fälle bei Go-Typ-Wechseln zu unerwartetem Verhalten führen?
Mehrere Fälle in Go-Typwechseln
Beim Zuweisen eines Schnittstellenwerts zu einer Typwechselvariablen hängt der resultierende Typ von der Fallliste ab Struktur. Mehrere case-Auflistungen in einer switch-case-Anweisung können zu unerwartetem Verhalten führen.
In dem von Ihnen bereitgestellten Codeausschnitt heißt es:
switch a := foo.(type){ case B, A: a.test() }
Der Fehler tritt auf, weil der Typ der Variablen a interface{} ist. , nicht A oder B. Dies liegt daran, dass die Fallliste mehrere Typen enthält, sodass der Typ von a derselbe bleibt wie der Typ des Schnittstellenausdrucks (foo).
Um dieses Problem zu beheben, Die Fallliste sollte nur einen einzigen Typ enthalten:
switch a := foo.(type){ case A: a.test() }
Durch die Beschränkung der Fallliste auf einen bestimmten Typ hat die Variable a den erwarteten Typ, sodass der Methodenaufruf erfolgreich sein kann.
Alternativ können Sie den Schnittstellentyp explizit mithilfe eines Assertionsausdrucks bestätigen:
if a, ok := foo.(tester); ok { fmt.Println("foo has test() method") a.test() }
In diesem Fall hat die Variable a nur dann den erwarteten Typ, wenn die Assertion erfolgreich ist (d. h. ok ist wahr).
Das obige ist der detaillierte Inhalt vonWie können mehrere Fälle bei Go-Typ-Wechseln zu unerwartetem Verhalten führen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!