okx

学习简单易懂:区块链基础语言——Go语言面向对象:方法

时间:2023-06-16|浏览:197

欧易

欧易(OKX)

用戶喜愛的交易所

币安

币安(Binance)

已有账号登陆后会弹出下载

封装是面向对象编程的三大特征之一。封装的好处之一是提高编码的耦合性,即将信息和对数据进行实际操作的方式绑定在一起,提高可重用性和可扩展性;另一个好处是隐藏信息内容,即将不应该暴露的信息内容隐藏起来,通过密钥管理来隐藏数据信息,不被外部影响。换句话说,封装将信息和实际操作这种信息的编码逻辑实体线绑定在一起。

虽然Go语言没有专门的封装术语,但通过方法的使用,可以实现封装的特性。

一、Go语言方法

方法本质上是一个函数。与一般函数的语法格式有所不同,方法在func关键字和方法名之间添加了一个独特的信号接收器类型。其语法格式如下:

func (t Type) methodName() { //方法内容 }

注意:

a. 接收器t的名称可以自定义,它可以在方法的内部结构中具体浏览。

b. 对于一个类型,拥有的全部方法名必须是唯一的,但不同类型可以采用相同的方法名。

c. 创建在Type类型上的方法,将Type类型和对于此数据信息开展的编码实际操作绑定在一起,达到了封装的目的。

1.1 结构体类型的接收器和基本类型的接收器

接收器可以是结构体类型,也可以是基本类型。

当接收器类型为结构体类型时,定义在结构体上的方法和结构体所在的main包同属于一个作用域,因此方法可以同时关联到结构体类型的接收器上。

而Go语言的基本类型位于builtin包,因此方法不可以直接关联在基本类型的接收器上,必须先向基本类型声明类型别名。

1.1.1 结构体类型的接收器

当接收器类型为结构体类型时,方法内部结构可以访问结构体的成员变量。访问的语法格式如下:

t.variableName

方法的调用格式如下:

variableName.methodName()

注意:“变量定义.方法名”被称为选择器。

1.1.2 基本类型的接收器

在使用方法之前,需要先声明基本类型别名,然后才能使用方法。方法的调用格式如下:

variableName.methodName()

注意:“变量定义.方法名”被称为选择器。

1.2 值类型接收器和指针类型接收器

接收器可以是值类型或指针类型。

如果接收器是值类型,则在方法调用时,无论传递的参数是值类型还是指针类型,信号接收器都会把它们转换成值类型,对值类型接收器进行更改不会影响参数本身。

如果接收器是指针类型,则在方法调用时,无论传递的参数是值类型还是指针类型,信号接收器都会把它们转换成指针类型,对指针类型接收器进行更改会影响参数本身。

二、方法和函数的差异

在Go语言中,方法本质上是一种函数,但它与普通函数有所不同,如表1所示。

2.1 方法和函数在目标层面的区别

2.1.1 接收器是值类型的方法和参数是值类型的函数

函数的参数是值类型,只能接受值类型的实参;

方法的接收器是值类型,可以接受值类型和指针类型的实参。

2.1.2 接收器是指针类型的方法和参数是指针类型的函数

函数的参数是指针类型,只能接受指针类型的实参;

方法的接收器是指针类型,可以接受值类型和指针类型的实参。

2.2 多个方法和多个函数的命名方案

方法名可以相同,但只能在不同类型上定义。在一个程序中,不允许有多个同名函数。

三、方法值和方法表达式

除了使用“变量名.方法名(参数)”的方式调用方法之外,还可以使用方法值和方法表达式两种方式启用方法。

3.1 方法值

方法值是一种方法调用语法,通过将方法表达式用作值获取函数类型的变量。这个变量可以在不需要接收器的情况下调用方法。

3.2 方法表达式

方法表达式是一种函数调用语法,如表2所示。

注意:

a. 引入的方法表达式被还原为常规函数形式,将此表达式的值分配给变量后,可以通过显式传递参数来使用函数。

b. 如果方法的接收器类型是值类型,则方法表达式中的类型必须是值类型T,方法表达式启动时,接收器也必须是值类型p;如果方法的接收器类型是指针类型,则方法表达式中的类型只能是指针类型*T,方法表达式启动时,接收器也必须是指针类型&p。

四、延迟方法调用

defer不仅适用于函数调用,也可用于方法的延迟调用。

参考文献:

[1]许式伟,吕桂华。<>。北京:人民邮电出版社,2012:62-67。

[2]谭浩强。<>。清华大学出版社,2006年。

[3]陈维兴,陈昕。<>。人民邮电出版社,2010年。

-END-

链块学校网课学习服务平台链接:http://wk.liankuai.tech/

助课通讯卫星:lkxy007

热点:GO语言 区块链

« 上一条| 下一条 »
区块链交流群
数藏交流群
区块链币圈-全球区块链数字货币行情、比特币虚拟货币资讯,狗狗币以太坊环保币柚子币莱特币瑞波币等加密数字货币价格非交易行情查询,金色财经巴比特范非小号快讯平台。
趣开心资讯 Qukaixin.cn ©2020-2024版权所有 桂ICP备19010284号-1