golang关于.(type)的使用
package main import "fmt" type in interface { String() } type A struct { } func (a *A) String() { fmt.Println("I am A!") } func (a *A) StringA() { fmt.Println("I am A! Doing StringA()") } type B struct { str string } func (b *B) String() { fmt.Println("I am B!") } func (b *B) StringB() { fmt.Println("I am B! Doing StringB()") } func main() { var i in i = &B{} //t := i.(type) //编译报错:use of .(type) outside type switch switch t := i.(type) { case *A: t.String() t.StringA() case *B: t.String() t.StringB() default: } }
阅读golang net包源码时,遇到了有趣的写法 .(type)
理解是获取接口实例实际的类型指针,以此调用实例所有可调用的方法,包括接口方法及自有方法。
需要注意的是该写法必须与switch case联合使用,case中列出实现该接口的类型。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: PHP根据文件头检测文件类型
- 下一篇: HTML5本地数据库(一)