区块链技术语言(二十三)——Go语言面向对象:方法

封装是面向对象三大特性之一。封装的好处,一个是增加代码内聚性,就是将数据和对数据的操作封装在一起,提高可复用性和可维护性;还有就是信息隐藏,就是把不该暴露的信息藏起来,通过访问控制来隐藏数据,不被外界干扰。也就是说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。Go语言没有封装这个名词,但它通过方法实现了封装的特性。

一、Go语言方法

方法,本质上是一个函数。与普通函数的格式有一点不同,它在关键字 func 和方法名中间加入了一个特殊的接收器类型。其格式如下:

注:

a. 接收者t的名字自定义,它可以被方法的内部内容访问;
b. 类型拥有的所有方法名都必须是唯一的,但不同的类型可以使用相同的方法名;
c. 建立在Type类型的方法,让Type类型的数据和对此数据进行的代码操作捆绑在一起,实现了封装。
1.1 结构体类型的接收者与基本类型的接收者

接收者既可以是结构体类型,也可以是基本类型。接收者类型为结构体类型,定义的结构体和定义在结构体上的方法同属一个main包,所以方法可以直接绑定到结构体类型的接收者上。但是Go语言的基本类型位于builtin包,定义于main包的方法不能直接绑定在基础类型的接收者,所以必须先对基本类型声明类型别名。

1.1.1 结构体类型接收者

接收者可以被方法内部内容访问,当接收者类型为结构体类型时,方法内部也可以访问结构体的成员变量,访问格式为:

方法的调用格式为:

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

1.1.2 基本类型接收者

在使用方法之前先对基本类型声明类型别名,再使用方法。方法的调用格式为:

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

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;
c. 若方法接收器类型是指针类型:方法表达式中的类型只能是指针类型(*T),方法表达式调用时,接收者必须是指针&p。

四、方法的延迟调用

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

参考资料
[1] 许式伟,吕桂华.Go语言编程[M].北京:人民邮电出版社,2012:62-67.
[2] 谭浩强.C++面向对象程序设计[M]. 清华大学出版社,2006
[3] 陈维兴,陈昕.C++面向对象程序设计[M]. 人民邮电出版社,2010

原文地址:https://www.cnblogs.com/efish/p/go-language-Object-Oriented-method.html

时间: 2024-10-01 00:37:51

区块链技术语言(二十三)——Go语言面向对象:方法的相关文章

第10讲 | 深入区块链技术(二):P2P网络

在上一篇文章中,我大致讲解了一下区块链技术的几个核心要素.P2P网络协议.分布式一致性算法(共识机制).加密签名算法.账户与存储模型.今天我们就来看看区块链技术的第一个核心要素:P2P网络. 如果我们简单来看P2P技术,它的应用领域已经非常广泛了,从流媒体到点对点通讯.从文件共享到协同处理,多种领域都有它的身影出现. 同样的,P2P的网络协议也有很多,比较常见的有BitTorrent.ED2K.Gnutella.Tor等,也就是我们常说的BT工具和电驴. 比特币.以太坊等众多数字货币都实现了属于

主流区块链技术特点及Fabric V0.6&V1.0版本特点

声明:文章内容来源于网络. 一.主流区块链技术特点 二.Hyperledger的fabric V0.6总体架构: 对应的0.6版本的运行时架构: 0.6版本的架构特点是: 结构简单: 应用-成员管理-Peer的三角形关系,主要业务功能全部集中于Peer节点:    架构问题:由于peer节点承担了太多的功能,所以带来扩展性.可维护性.安全性.业务隔离等方面的诸多问题,所以0.6版本在推出后,并没有大规模被行业使用,只是在一些零星的案例中进行业务验证: 三.Hyperledger的fabric V

区块链技术的基本特点

区块链技术近期大热. 作为比特币和其他虚拟货币底层核心技术,区块链是一种开放的分布式分类帐本,可以有效地以可验证和永久的方式记录双方之间的交易信息,而分类帐本身也可以被编程以自动触发交易.小编带您简单了解一下区块链技术的五个原则. 区块链开发 155--0116--2665 区块链技术的五个基本特点如下: 区块链技术特点一:分布式数据库 区块链上的每一方都可以访问整个数据库及其完整的历史记录. 没有单一方控制数据或信息. 每一方都可以直接验证其交易合作伙伴的记录,而无需中间人. 区块链技术特点二

区块链扫盲:区块链技术初探(二)

?5. 共识机制 区块链是一种去中心化的分布式账本系统,由于点对点网络下存在较高的网络延迟,各个节点所观察到的事务先后顺序不可能完全一致.因此区块链系统需要设计一种机制对在差不多时间内发生的事务的先后顺序进行共识.这种对一个时间窗口内的事务的先后顺序达成共识的算法被称为"共识机制". 5.1区块链和分布式系统容错的相同点 (1) Append only. (2) 强调序列化(时间有序). (3) 少数服从多数原则. (4) 分离覆盖的问题:即长链覆盖短链区块,多节点覆盖少数节点. 5.

如何从零开始学习区块链技术——推荐从以太坊开发DApp开始

很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取了技术架构和体系,称之为区块链技术.从比特币提取的区块链技术称之为区块链1.0时代,那个时候的应用主要以电子货币和去中心化交易为主,比如各种山寨币.而以太坊将区块链带入了2.0的时代,区块链2.0不是推翻了1.0,而是在1.0的基础上实现了区块知晓.价值知晓.图灵完备,并进行了细节优化,从而形成了以

区块链技术的比较

原文地址:https://blog.csdn.net/diannao720/article/details/53835721 开源: 名称 公识算法 适合场景 开发语言 智能合约 TPS 比特币1.0 POW 公链 C++ 否 7 以太坊ETH 1.0 POW 公链/联盟链 GO 是 25 IBM HyperLedger fabric PBFT为主 联盟链 GO 是 100K 比特股BitShare DPos 联盟链 C++ 否 500 公证通Factom Factom自有共识机制,类Pos 公

星光区块链技术

您认识区块链吗?如果我们把数据库假设成一本账本,读写数据库就可以看做一种记账的行为,区块链技术的原理就是在一段时间内找出记账最快最好的人,由这个人来记账,然后将账本的这一页信息发给整个系统里的其他所有人.这也就相当于改变数据库所有的记录,发给全网的其他每个节点,所以区块链技术也称为分布式账本(distributed ledger).联系电话:0755-23204229 区块链可以大致分成两个层面,一是做区块链底层技术;二是做区块链上层应用,即基于区块链的改造.优化或者创新应用.一:区块链的核心意

区块链快速入门(五)——区块链技术的演化

区块链快速入门(五)--区块链技术的演化 一.区块链技术的发展 比特币区块链面向转账场景,支持简单的脚本计算.如果引入更多复杂的计算逻辑,将能支持更多应用场景,即智能合约(Smart Contract).智能合约可以提供除了货币交易功能外更灵活的合约功能,执行更为复杂的操作.引入智能合约的区块链,已经超越了单纯数据记录功能:可以为区块链加入权限管理,高级编程语言支持等,实现更强大的.支持更多商用场景的分布式账本系统.区块链技术的三种典型演化场景如下: 二.区块链技术的分类 根据参与者的不同,区块

如何理解分布式和区块链技术

如何理解分布式和区块链技术 原文  http://www.51cion.com/article/7743.html 主题 分布式系统比特币 编译:比特人qin 简介: 区块链技术 是应用程序基础,它超越了比特币本身.这些技术能促进智能交易. 分布式 股权发布和资产转移. 彩色币 是使用 比特币区块链 技术的一个例子,另外也有其他使用其他 区块链 的例子,比如 狗狗币 和 莱特币 等.同时也介绍了开放交易的优点和缺点,另外还有一些其他的技术比如Maidsafe, Ethereum,和 Ripple

黑客专家深度分析区块链技术主要用途

区块链的缺陷及其面临的技术挑战,黑客教父郭盛华试图警示大家:该技术还处于非常早期的阶段,企业应做足信息安全措施,以防泄露信息. 区块链技术可以集成到多个领域.目前,区块链的主要用途是作为加密货币的分布式账本,最值得注意的是比特币.虽然在印度,中国,美国,瑞典,新加坡,南非和英国等国家的几个中央银行正在研究发行中央银行颁布的加密货币(CICC),但迄今为止没有这样做. 一般潜力 区块链技术在长期转变商业运营模式方面具有巨大潜力.区块链分布式分类账技术更像是一种基础技术 - 具有为全球经济和社会系统