2015-11-15 61 views
2

我正在通過閱讀「Effective Go」來學習Go語言。`go`中`switch`的評估順序

我發現了例如約型開關:

var t interface{} 
t = functionOfSomeType() 
switch t := t.(type) { 
default: 
    fmt.Printf("unexpected type %T\n", t)  // %T prints whatever type t has 
case bool: 
    fmt.Printf("boolean %t\n", t)    // t has type bool 
case int: 
    fmt.Printf("integer %d\n", t)    // t has type int 
case *bool: 
    fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool 
case *int: 
    fmt.Printf("pointer to integer %d\n", *t) // t has type *int 
} 

我的理解是在switch的情況下從頂部評估,以底部和匹配條件停止。那麼是不是總是停在default並打印「意外類型...」的例子?

+1

否。請查看語言規範中的「類型開關」一章。 – Volker

+0

@Volker默認情況下的選擇實際上只在「表達式切換」中進行了解釋。 –

+0

@Rhymoid:「[Switch statement](https://golang.org/ref/spec#Switch_statements):類型切換:類型切換比較類型而不是數值,它類似於表達式切換。」因此,您應該已經閱讀了表達式開關的規範。 – peterSO

回答

6

this Golang tutorial

  • 如果沒有其它case塊匹配
  • default塊可以是內switch塊的任何地方執行的default的代碼塊,並且不一定是持續詞彙順序