美文网首页
接口 interface golang

接口 interface golang

作者: 与子笑 | 来源:发表于2020-09-05 10:40 被阅读0次
type USB interface { //定义一个接口    
    Name()    
    Connect()
    }
type USBa interface { //定义一个接口做Disconnect测试    
    Name()    
    Connecte
    }
type Connecte interface { //嵌入到USBa当中    
    Connect()
    }
type PC struct {    
    name string
    }
func (a PC) Name() {    
    fmt.Println(a.name)
    }
func (a PC) Connect() {    
    fmt.Println("已成功连接pc", a.name)
    }
type Phone struct { //定义一个结构体,可以简单的理解为php里的类    
    name string
    }
func (a Phone) Name() { //将Name方法绑定到a这个结构体中    
    fmt.Println(a.name)
    }
func (a Phone) Connect() { //同时将connect绑定到这个结构体中    
    //只要这个结构体绑定了某个接口的所有方法,则默认实现了该接口,若定一个没有方法的结构则默认所有结构都实现了该结构    
    fmt.Println("已成功连接上您的:", a.name)
}
func main() {    
    var a USB    
    a = Phone{"iphone"} //实现一个结构体定义其name,在这里可以简单的理解为a是实现了一个接口的对象    
    a.Name()    
    a.Connect()    //上面可以简写为以下代码    
    //a:=Phone{"iphone"}但是这样并不直观,因为并不知道这个a是否实现了USB接口,如果没有实现    
    //那必然调用不了该接口的所有方法,所以我们需要一个检测是否实现了该接口的方法disconnect    
    var b USBa    
    b = PC{"smartisan"}    
    Disconnect(b)
}
func Disconnect(usb USBa) { //做一个断开连接的方法,要求传进来一个实现了usba接口的结构    
    if st, ok := usb.(PC);ok { //这里可以简单的理解为接收到一个实现了usba的结构        
    //这种模式叫ok pattern        
    //传进来一个结构体,可以看到这个结构体有没有实现该接口,ok返回状态st为该实例        
    fmt.Println("已断开您的", st.name) //能走到这里说明已经能取到st的name了而usb接口这一层是没有name这个属性的    
    }
} 
//这里有点想不明白既然传进来的必须是一个已经实现了该接口应该是没必要再做一个disconnect以近乎一种
//类似与一个杯子非要等装满水后才能判断这个杯子可不可以装水。经过测试没有实现该接口而穿进来一个结构体的话是会报错的
//讲道理的话代码应当如下
type Stringer interface {
   String() string
}
if sv, ok := v.(Stringer); ok {
    fmt.Printf("v implements String(): %s\n", sv.String())
  //打印note: sv, not v
  }
  disconnect的传入类型必须是一个结构体抑或是一个空接口才合理!
  下面是一个type switch判断该结构实现了哪种接口
func Disconnect_Type_Switch(usb interface{}) {    
    switch v := usb.(type) {    
        case Phone:        
            fmt.Println(v.name)    
        case PC:        
            fmt.Println(v.name)    
        default:        
            fmt.Println("两个接口都没有实现")    
    }
}

原文链接:接口 interface-GOLANG

相关文章

  • 接口 interface golang

    原文链接:接口 interface-GOLANG

  • interface{} 接口类型

    interface定义 interface(接口)是golang最重要的特性之一,Interface类型可以定义一...

  • 接口 interface-GOLANG

    golang -@amazeUI -2017-10-10 22:50:55 //func main() { // ...

  • Golang笔记: 接口(interface)

    Go语言不是一种“传统”的面向对象编程语言,它里面没有类和继承的关系。但是Go语言通过灵活的接口概念,可以实现很多...

  • Golang 数据排序

    sort.Interface 接口 这个接口是 sort 包的核心,它有3个方法。这是 Golang 很酷的一个特...

  • Golang 中的接口 (interface)

    依赖于接口而不是实现,优先使用组合而不是继承,这是程序抽象的基本原则。Golang 中的 interface 让编...

  • Golang接口interface的使用

    关键字interface 如果一个结构体绑定的方法包含接口的所有方法,即认为实现了该接口 将对象赋值给接口时,会发...

  • 《日子》golang-接口interface

    接口interface -接口是一个或多个方法签名的集合-只要某个类型拥有该接口的所有方法签名,即逄实现该接口,无...

  • golang中反射与接口的关系

    在golang中interface底层分析文中分析了接口的底层原理。其中接口的内部结构分两种一种是iface接口,...

  • Go-Interface

    Go 接口 Interface定义 在golang中,接口是一种抽象类型,接口可理解为一组方法的集合。跟Struc...

网友评论

      本文标题:接口 interface golang

      本文链接:https://www.haomeiwen.com/subject/ghtejktx.html