Go语言程序设计(十三)方法

news2024/10/5 13:03:59

        Go语言虽然没有类(Class),但同样支持方法(Method),Go语言里的Method其实就是一个带接收者(Receiver)的函数。

一、Method的基本定义

        Go语言中的Method类似于一个函数,只是函数名前多了一个绑定类型参数——receiver。

基本格式如下:

func (recv receiver_type) methodName(参数列表)(返回值){
        ...........
}

Method中的Receiver可以是内置类型、自定义类型、结构体或指针类型。

1、多个Method可以同名

(1)在定义Method时,多个Method可以同名,如果接收者不一样,那么Method就不一样。

(2)如果普通类型作为Receiver,它只是一个值传递;而指针类型作为Receiver,它将是一个引用传递。两者的差别在于,指针作为Receiver 会对实例对象的内容发生操作,而普通类型作为Receiver仅是以副本作为操作对象,并不对原实例对象发生操作

(3)Method里面可以访问接收者的字段,调用Method进行访问,就像在Struct里访问字段一样。

2、匿名Receiver

(1)如果方法代码中从不使用Receiver参数,那么就可以省略Receiver的变量名,此时的接收者将是一个匿名Receiver。

(2)如果定义了两个匿名Receiver,一个是普通类型,另外一个是指针类型。注意,这种情况下方法名不能同名,要不然编译会出错。

二、Method的继承

        如果匿名字段实现了一个Method,那么包含这个匿名字段的Struct对象也能调用该Method。

 三、Method重写

        在上例中,如果student想要实现自己的sayHi()方法,可以采用Method重写的方法来解决。这和匿名字段重名是一样的道理,即外部方法会隐藏匿名字段同名方法。所以可以在student上再定义一个Method,重写了匿名字段的方法。

 编译并运行该程序,输出结果为:

Hi,I'm郑智you can call me on 010一22002.
Hi,I'm李明,I study in Yale University,call me on 010- 11001.

        通过上例的运行结果可以看出,对象studentl在调用sayHi()方法时,Receiver为people的方法将被隐藏,实际调用的是Receiver为student的这个外部sayHi()方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

启用 -parameters 编译选项简化 mybatis @Param 注解重复问题

在使用 mybatis 查询的时候, 只需要定义一个查询接口, mybatis 会为我们注入注解实现或是 xml 实现. 但当我们需要传递参数时, 通常需要 Param 来定义一个名称, 但经常的, 我们也不难发现, 这个名称与参数名称通常是一样的: User findUser(Param("username") String…

Docker使用Volumes做数据持久化

场景:docker 安装的 Pgsql 每当电脑重启docker重启 会发现 数据库都没了数据也没了 解决办法:使用docker volumes 做挂载 以PGSQL为例子,理论其他数据库或者项目需要持久化数据 应该都可以 1.创建Volumes 名字自己可以随便取。 2.拉去镜像…

开源预训练框架 MMPRETRAIN官方文档(概览、环境安装与验证、基础用户指南)

MMPretrain是全新升级的开源预训练框架。它已着手提供多个强大的预训练骨干网并支持不同的预训练策略。MMPretrain 源自著名的开源项目 MMClassification 和MMSelfSup,并开发了许多令人兴奋的新功能。目前,预训练阶段对于视觉识别至关重要。凭借丰富而强…

[SSM]MyBatis查询语句与动态SQL

目录 十、MyBatis查询语句专题 10.1返回Car 10.2返回List 10.3返回Map 10.4返回List 10.5返回Map,map> 10.6resultMap结果映射 使用resultMap进行结果映射 是否开启驼峰命名自动映射 10.7返回总记录条数 十一、动态SQL 11.1 if标签 11.2 where标签 11.3 trim标…

Oracle表空间和用户

Oracle表空间和用户 前言 1、创建表空间 2、 删除表空间 3、创建用户 4、用户赋权限 5、Oracle三个重要的角色 1、创建表空间 ORACLE 数据库的逻辑单元。 一个表空间可以与多个数据文件(物理结构)关联 一个数据库下可以建立多个表空间,一个表…

探秘制造业数智化:揭开低代码开发平台的新篇章

前言 随着数智时代的到来,制造业面临着前所未有的转型机遇。在这个信息爆炸的时代,如何有效运用科技和数据资源,成为了制造业企业的当务之急。而低代码开发平台,如JNPF快速开发平台,正是这个转型过程中不可或缺的利器。…

【编程语言 · C语言 · 结构体】

【编程语言 C语言 结构体】https://mp.weixin.qq.com/s/pWI712NxhPJi37eWrE9ofw

【产生初始解利器】基于蒙特卡洛模拟产生满足固定需求和固定供给的随机供给矩阵

如何生成一个总和是定值的随机矩阵 震惊,如果做一个约束比较强的模型,解的矩阵需要满足很多等式约束,而且都是整数,随机产生初始解很困难,该怎么办? 震惊,如果做一个约束比较强的模型&#xff0…

多元回归预测 | Matlab粒子群算法(PSO)优化极限梯度提升树XGBoost回归预测,PSO-XGBoost回归预测模型,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 粒子群算法(PSO)优化极限梯度提升树XGBoost回归预测,PSO-XGBoost回归预测模型,多变量输入模型,多变量输入模型,matlab代码回归预测,多变量输入模型,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高…

多元回归预测 | Matlab麻雀算法(SSA)优化极限梯度提升树XGBoost回归预测,SSA-XGBoost回归预测模型,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 麻雀算法(SSA)优化极限梯度提升树XGBoost回归预测,SSA-XGBoost回归预测模型,多变量输入模型,多变量输入模型,matlab代码回归预测,多

windows设置右键一键打开文件的配置

在安装软件时一般通过msi或者exe安装,这是一般会有提示绑定到鼠标右键,如果没有勾选则安装后就无法通过右键打开,这是需要把文件拖到快捷方式上面才可以使用该软件打开。 另外如何下载的是zip的压缩包源码格式根本没有设置的选项&#xff0c…

2.3 Web应用 -- 3. HTTP 消息格式

2.3 Web应用 -- 3. HTTP 消息格式 HTTP请求消息HTTP响应消息 HTTP请求消息 HTTP协议有两类消息 请求消息(request)响应消息(response) 请求消息 ASCII:人直接可读 HTTP请求消息的通用格式 上传输入的方法 POST方法 网页经常需要填写表格(form)在请求消息的消息体(…

【CMU15-445 FALL 2022】Project #1 - Extendable Hashing

Reference & Thank & Related CMU15445-project1-可扩展哈希表数据库——可拓展哈希(Extendable Hashing)【CMU15-445数据库】bustub Project #1:Buffer PoolExtendible Hashing (Dynamic approach to DBMS) Extendable Hashing co…

链表问题——长整数加法运算题解【双向链表】

长整数加法运算 问题描述 假设2个任意长度的整数x、y分别用链表A和B存储,现要求设计一个算法,实现xy。计算结果存储在链表C中。 说明: 链表A、B、C可以是单向链表或双向链表,但由于A和B输出时需要从头至尾遍历,而做…

Git提交项目到服务器上

目录 第一步:git status第二步:git pull第三步:git status第四步:git add第五步:git commit第六步:git push 第一步:git status git status 看一下你这个项目里,修改过什么公版的东西…

性能优化(一)JMeter使用

简介: jmeter 是 apache 公司基于 java 开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简 单。因为 jmeter 是 java 开发的,所以运行的时候必须…

Django_模板(四)

目录 一、模板 创建模板文件 定义模板 视图调用模板 简写视图调用的模板 二、去除模板中的硬编码 URL 三、为 URL 名称添加命名空间 四、生成模板渲染后的静态文件 源码等资料获取方法 一、模板 如何向请求者返回一个漂亮的页面呢? 肯定需要用到html、css…

多元分类预测 | Matlab基于鲸鱼优化深度置信网络(WOA-DBN)的分类预测,多输入单输出模型,多特征输入模型,WOA-DBN分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab基于鲸鱼优化深度置信网络(WOA-DBN)的分类预测,多输入单输出模型,多特征输入模型,WOA-DBN分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语…

Unity3d的智力拼图小游戏

Unity3d的智力拼图小游戏 项目地址:https://download.csdn.net/download/Highning0007/88015674

关于async/await

async/await是什么? 简单来说async/await是Promise的语法糖,async是异步的意思,await是等待的意思。async function 声明一个函数里面可能有异步代码需要执行,await则可以认为是等待一个异步方法执行完成。 async/await的用法 …