`go`中`switch`的评估顺序

时间:2015-11-15 22:30:58

标签: go

我正在通过阅读“Effective Go”学习Go语言。

我找到了一个关于类型切换的例子:

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 个答案:

答案 0 :(得分:6)

来自this Golang tutorial

  • 如果其他default块都不匹配,则执行case的代码块
  • default块可以在switch块内的任何位置,并且不一定以词法顺序持续