go interface

//所有的结构体 都实现了空接口
//接口类型转换 结构体变量 = 接口名(实现接口的结构体变量)    只能高级转为低级 就是转前的接口中方法在转后接口中都有实现
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")
    }
}

 

posted @ 2016-12-28 13:56  jackylee92  阅读(157)  评论(0编辑  收藏  举报