Go语言之interface

发布时间:2020-07-07 06:56:57 作者:故新
来源:网络 阅读:658

interface 理论


举例

1、创建接口

// interface 接口  练习
//实现接口的原则就是
//实现了它定义的方法,就默认是实现了接口
package main

import "fmt"

//声明一个接口
type USB interface {
    //声明方法Name,  并设置 返回值类型string
    Name() string

    //声明方法Connect方法,无返回值
    Connect()
}

//声明一个类型,在Go语言中,对应的就是struct类型
type PhoneConnector struct {
    //声明一个私有属性
    name string
}
//---------------------声明完Name,Connector方法后,就是实现了USB接口了---------------------------
//使用receiver,将类型跟方法进行绑定
func (pc PhoneConnector)Name() string{

    return pc.name
}

func (pc PhoneConnector)Connector()  {
    fmt.Println("connected:\t", pc.name)
}

//--------------------------------------------------------------------------------------
func main() {
    a := PhoneConnector{"apple"}
    fmt.Println("Name:\t", a.Name())
    a.Connector()
}

2、接口之间的嵌套 练习

//interface 嵌套  练习测试
package main

import "fmt"

//定义一个空的接口
//这样的话,所有的类,都默认实现了这个接口,因为它没有方法
//定义的空接口,就相当于定义了一 个Object对象,最高层
//都是它的子类了,就没有任何限制了
type nullEmpty interface {

}

// 定义一个  父接口
type HOME interface {
    //这个接口里,只定义一个方法
    Name() string
}

//再定义一个接口, 这相当于是子接口了
type MyHome interface {
    Show() string
    //这样就嵌套了 一个接口
    HOME
}

//声明一个结构类型
type BeijingHome struct {
    name string
}

//-----------开始创建方法method-----
func (info BeijingHome)Show(){
    fmt.Println("Show()--->info.name:\t", info.name)
}

func (info BeijingHome)Name() string{

    return info.name
}

func main() {
    a := BeijingHome{"yihuyuan"}

    fmt.Println("name:\t", a.Name())
    a.Show()

    //------下面演示一下,上面理论中说的---复制品的问题----
    b := a
    b.name = "lenovo" //修改后,并没有修改a里的值
    b.Show()

    Disconnect(a)
    Disconnect2(a)
}

//设计一个简单的类型断言
func Disconnect(home HOME){
    if pc, ok := home.(BeijingHome); ok{
        fmt.Println("Disconnected:\t", pc.name)
        return
    }
    fmt.Println("Unknown decive.")
}

//设计一个简单的类型断言
//传入的参数,是,空接口
//实际上,对于传入的参数,就没有限制了
func Disconnect2(home interface{}){
    //对Disconnect()方法,进行改造,
    //因为,传入的参数是顶层,相当于Java里的Object,没有任何限制
    //类型,需要自己判断
    switch v := home.(type) {
    case BeijingHome:
        fmt.Println("Disconnected:\t", v.name)
    default:
        fmt.Println("Unknown decive.")
    }

}

3、不同接口之间的转换

//不同接口之间的转换,类似于Java中的向上转型,或者向下转型
//就是说,有两个接口A, B
//其中,A接口里,嵌入了B
//那么A接口可以转换成B接口,但是,B接口不能转换成A接口,因为
//A接口里,可能包含B接口里没有的方法
//也就是说,多的可以向少的转换,反之不可。
package main

import "fmt"

type USB2 interface {
    Name() string
    Connecter
}

type Connecter interface {
    Connect()
}

type PcConnecter struct {
    name string
}

func (pcConnecter PcConnecter)Name() string {
    return pcConnecter.name
}

func(pcConnecter PcConnecter)Connect() {
    fmt.Println("Connected:\t", pcConnecter.name)
}

func main() {
    pc := PcConnecter{"appleConnector"}
    var a Connecter
    //将USE2 类型,强制 转换成了Connecter类型
    a = Connecter(pc)
    a.Connect()

    //------验证----只有当接口存储的类型和对象都为nil时,接口才等于nil
    //声明一个空接口, 也没有赋值,就是nil
    var aa interface{}
    fmt.Println( aa == nil)  // aa 本身就是一个nil,啥也没存

    //变量p, 是一个指向int类型的指针
    //直接初始化为nil
    var p *int = nil
    aa = p //aa 指向p
    fmt.Println( aa == nil)
}
推荐阅读:
  1. go语言中interface的实践
  2. GO语言method、interface、reflection、select

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

interface go 语言

上一篇:AD管理员必备技能(一)在线角色转移

下一篇:AGG第十四课 agg::conv_dash 渲染虚线

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》