//所有的结构体 都实现了空接口 //接口类型转换 结构体变量 = 接口名(实现接口的结构体变量) 只能高级转为低级 就是转前的接口中方法在转后接口中都有实现 package main import ( "fmt" ) //定义一个接口 type USB interface{ Name() string //方法 返回名称string Connect() } //结构体 type PhoneConnecter struct{ name string } //PhoneConnect 结构体实现了USB 接口的Name()方法 func (pc PhoneConnecter)Name() string { return pc.name } //PhoneConnect 结构体实现了USB接口的Connect的方法 func (pc PhoneConnecter)Connect(){ fmt.Println("connect:",pc.name) } func main(){ TestInterface() } func TestInterface(){ var a USB //声明一个a USB类型 a = PhoneConnecter{"jacky"} //声明一个结构体 a.Connect() //调用a实现了的USB接口中的Connect方法 fmt.Println(a.Name()) //调用a实现了的USB接口中的Name方法 Disconnect(a) //这里不用a调用把a[结构体]当参数传入 } //func Disconnect(usb USB){ //这里的参数为接口,当传入来的是一个结构体,这个结构体实现了USB这个方法。 func Disconnect(usb interface{}){ //下面使用switch /* if pc,ok := usb.(PhoneConnecter);ok{ //判断传进来的是不是PhoneConnecter类型,pc是a, ok 是true/false; fmt.Println("Disconnect",pc.name) return } */ //或者 switch v := usb.(type) { //获取传进来的a的类型 case PhoneConnecter: //如果是PhoneConnect类型 fmt.Println("Disconnected",v.name) default: fmt.Println("Unknown decive") } }