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")
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值