Heim >Backend-Entwicklung >Golang >Wie können mehrere Fälle bei Go-Typ-Wechseln zu unerwartetem Verhalten führen?

Wie können mehrere Fälle bei Go-Typ-Wechseln zu unerwartetem Verhalten führen?

Susan Sarandon
Susan SarandonOriginal
2025-01-01 06:35:11906Durchsuche

How Can Multiple Cases in Go Type Switches Lead to Unexpected Behavior?

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!

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