1、go方法与类成员函数
方法其实就是一个函数,在func这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。格式定义如下:
func (t type) methodname(parameter list) {
} 因为go中没有类class的概念,所以要给自定义的类型添加成员函数就无法像c++一样写在类定义中,在go中只能使用方法这一特性变相的实现成员函数和多态:
//定义类型type employee struct { name string age int}//添加值接收器的方法func (e employee) changename(newname string) { e.name = newname}//添加指针接收器的方法func (e *employee) changeage(newage int) { e.age = newage}func main() { e := employee{ name: mark andrew, age: 50, } fmt.printf(employee name before change: %s, e.name)//调用属性 e.changename(michael andrew)//调用值接收器,无法改变属性值 fmt.printf(employee name after change: %s, e.name) fmt.printf(employee age before change: %d, e.age) (&e).changeage(51)//调用指针接收器 fmt.printf(employee age after change: %d, e.age)} 注意:为了在一个类型上定义一个方法,方法的接收器类型定义和方法的定义应该在同一个包中,其实就是_类定义和成员函数定义要放在一起,很好理解_。
2、接口
在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么(抽象定义),至于如何实现这个行为,则由对象本身去确定(实现细节)。
2.1、接口的定义
在go语言中,接口就是方法签名(method signature)的集合。当一个类型实现了接口中的所有方法,我们称它实现了该接口,这与面向对象编程(oop)的说法很类似。我们可以用接口来实现c++面向对象的多态。
//interface definitiontype interfacename interface { methodname(parameter list) //...} 使用示例如下:
//定义interfacetype describer interface { describe()}//定义类型,可以当作c++类type person struct { name string age int}type address struct { state string country string}//使用值接收器实现接口func (p person) describe() { fmt.printf(%s is %d years old, p.name, p.age)}//使用指针接收器实现接口func (a *address) describe() { // 使用指针接受者实现 fmt.printf(state %s country %s, a.state, a.country)}func main() { var d1 describer//定义接口类型变量,类似c++基类 p1 := person{sam, 25} d1 = p1 //赋值为person类型的对象,因为该对象已经实现接口,类似c++父类指针赋值子类对象 d1.describe()//调用成员函数 var d2 describer a := address{washington, usa} /* 如果下面一行取消注释会导致编译错误: cannot use a (type address) as type describer in assignment: address does not implement describer (describe method has pointer receiver) */ //d2 = a d2 = &a // 这是合法的,因为address 类型的指针实现了 describer 接口 d2.describe()} 我们可以把接口看作内部的一个元组 (type, value)
type是接口底层的具体类型(concrete type),可以通过v.(type)获取类型
value 是具体类型的值,可以通过v.(t)获取,t为具体的类型,比如int
2.2、接口的嵌套
go 语言没有提供继承机制,但可以通过嵌套其他的接口,创建一个新接口:
显示屏驱动板之SST模式和MST模式补充
I-Pi SMARC套件可加速工业应用的原型开发
打卡智能中国(四):向着沙漠,向着沙漠
5G天线技术面临哪些挑战?
ReRAM存储器助物联网设备降低能源消耗
嵌入式Linux应用开发之go方法与类成员函数
AREVO创建了可扩展的基于机器人的增材制造平台
鸿蒙系统中线程管理的使用
全新第三代荣威RX5实现高阶辅助驾驶 保障行车安全
LoRa Core™正在创造一个更加智慧的星球
自动化机械手臂可以替代重复性多的工种
三星电子在2019年的营收可能会下降19.7%
乐视eq-24bcn评测拆解评测 兼容性不错
引领智能交通,海信副总裁陈维强独揽青岛市科技最高奖
常见服务弱口令爆破工具:crack
威尔文教VR系列产品亮相2019北京教育装备展
5G释放万物互联的真正潜能
无线充电:下一个推动者
Android 中文视频教程1-开发环境建立
精密仪表放大器前端AD8295的功能特性及应用