go

44 阅读1分钟

接口绑定的具体实例的类型称为接口的动态类型。接口的静态类型在其定义时,其类型就已经被确定。如果两个接口方法签名集合相同,则这两个接口语义上完全等价,他们之间不需要强制转换就可相互赋值

有时查询已经初始化的接口变量绑定到的具体类型是什么或具体实例是否还实现了其他接口,就需要用到类型断言和接口类型查询 语法:i.(TypeName)

  • i必须是接口变量,如果是具体类型变量,编译器会报错。
  • TypeName可以是接口类型名也可以是具体类型名Type Switch 是 Go 语言中一种特殊的 switch 语句,它与普通的switch语句不同,它比较的是类型而不是具体的值。它判断某个接口变量的类型,然后根据具体类型再做相应处理。

Type Switch语法:

//i.(type)必须和switch一起使用 switch v := i.(type) { case type1: //todo somethings... case type2: //todo somethings... default: //todo somethings... }

  • i必须是接口类型
  • case语句跟接口类型名,此时v就是接口类型,指向i绑定具体类型实例的副本。
  • case语句跟具体类型名,此时v就是具体类型,指向i绑定实例的副本。
  • case后跟多个类型,使用逗号分隔,接口变量i绑定的实例类型只要和其中一个类型匹配,则直接使用o赋值给v。
  • 所有case语句都不满足,则执行default语句。
  • fallthrough语句不能在Type Switch语句中使用。