2016-03-18 10 views
0

Ich verwende Typ Schalter in Go, z. die folgende:Vermeiden Sie Typ Assertions in den Zweigen eines Typs wechseln

switch question.(type) { 
case interfaces.ComputedQuestion: 
    handleComputedQuestion(question.(interfaces.ComputedQuestion), symbols) 
case interfaces.InputQuestion: 
    handleInputQuestion(question.(interfaces.InputQuestion), symbols) 
} 

Gibt es eine Möglichkeit zu verhindern, dass ich die Art der Frage im Inneren des Gehäuses behaupten, bevor es in eine andere Funktion übergeben können?

Antwort

4

Ja, das Ergebnisses des Schalters Zuweisung gibt Ihnen die geltend gemachte Art

switch question := question.(type) { 
case interfaces.ComputedQuestion: 
    handleComputedQuestion(question, symbols) 
case interfaces.InputQuestion: 
    handleInputQuestion(question, symbols) 
} 

http://play.golang.org/p/qy0TPhypvp

+0

Super Jim, zwei Antworten in einer Reihe. Ich wusste, dass es einen besseren Weg geben musste. Vielen Dank! – edwardmp

+2

@edwardmp, das wird in [der Spezifikation] (https://golang.org/ref/spec#Switch_statements) erklärt. "Effective Go" [hat es abgedeckt] (https://golang.org/doc/effective_go.html#type_switch) und auch [der Wiki-Artikel über Switches] (https://github.com/golang/go/wiki/Schalter). Also rate ich dir wirklich, ein Buch über Go zu lesen ("Effective Go" wäre für den Anfang nur okay). – kostix

Verwandte Themen