类型选择 是一种允许连续进行多个类型断言的结构。
类型选择与普通的 switch 语句类似,但类型选择中的 case 指定的是类型(而不是值),这些类型会与给定接口值中 所保存值的类型进行比较。
switch v := i.(type) { case T: // 此处 v 的类型为 T case S: // 此处 v 的类型为 S default: // 无匹配;此处 v 的类型与 i 相同 }
类型选择中的声明与类型断言 i.(T) 的语法相同, 只是将具体类型 T 替换为关键字 type。
i.(T)
T
type
这个 switch 语句会检查接口值 i 中保存的值是否为 T 或 S 类型。 在 T 和 S 两个分支中,变量 v 的类型 分别为 T 和 S,并保存 i 中保存的值。 在 default 分支(即没有匹配项)中,变量 v 与 i 具有相同的接口类型和值。
i
S
v