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本地数据库(一)
