设为首页 加入收藏

TOP

Go语言 6 结构体、方法和接口(四)
2018-10-19 15:53:14 】 浏览:312
Tags:语言 结构 方法 接口
e: "华为"}

    p.Call()

 

    var c Camera

    c = &DigitalCamera{Name: "佳能"}

    c.TakePicture()

    c = &SmartPhone{Name: "华为"}

    c.TakePicture()

 

    var pc PhoneCamera

    pc = &SmartPhone{Name: "华为"}

    pc.Call()

    pc.TakePicture()

 

}

 

2 将一个接口赋值给另一个接口

Go语言中,只要两个接口拥有相同的方法列表(次序不同不要紧),那么这两个接口是等价的,可以相互赋值。 接口PhoneCamera与接口CameraPhone等价。

var pc PhoneCamera

    pc = &SmartPhone{Name: "华为"}

    pc.Call()

    pc.TakePicture()

    var cp CameraPhone

    cp = pc          //将一个接口赋值给另一个等价接口

    cp.Call()

    cp.TakePicture()

 

接口赋值并不要求两个接口必须等价。如果接口A的方法列表是接口B的方法列表的子集,那么接口B可以赋值给接口A。 接口Phone是接口PhoneCamera的子集,接口Camera也是接口PhoneCamera的子集。所以可以有如下的赋值:

var pc PhoneCamera

    pc = &SmartPhone{Name: "华为"}

    var p Phone

    var c Camera

    p = pc                //父集赋值给子集

    p.Call()

    c = pc                //父集赋值给子集  

    c.TakePicture()

6.3.4 接口查询

接口查询语法类似x.(T)x表示一个接口,T表示另一个接口类型。用来判断接口x操作的对象的是否实现了另一个接口类型。

var p Phone

    p = &SmartPhone{Name: "华为"}

    p.Call()

    if pc, ok := p.(PhoneCamera); ok {

        pc.TakePicture()

    }

 

 

6.3.5 空接口

由于Go语言中任何对象实例都满足空接口interface{},所以interface{}看起来像是可
以指向任何对象的类型。一个函数把interface{}作为参数,那么他可以接受任意类型的值作为参数,如果一个函数返回interface{},那么也就可以返回任意类型的值。

6.3.6 类型查询

Go语言中,还可以更加直截了当地询问接口指向的对象实例的类型。

 

 

//伪代码如下

var v1 interface{} = ...

switch v := v1.(type) {

case int: // 现在v的类型是int

case string: // 现在v的类型是string

...

    }

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go语言 3 程序的流程控制 下一篇golang代码文件目录组织、包目录..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目