当前位置: 首页 > news >正文

go中函数与方法的区别与go中关于面向对象理解

  1. 声明方法的区别

函数是一段可以独立调用的代码块,它可以有参数和返回值。函数的声明不依赖于任何类型,可以直接通过函数名进行调用。
函数的声明格式如下:

func functionName(parameters) returnType {// 函数体
}

示例:

func Add(a, b int) int {return a + b
}

方法
方法是附加到特定类型上的函数,这个特定类型称为方法的接收者。方法的声明需要在函数名之前指定其接收者。

方法的声明格式如下:

func (receiver ReceiverType) methodName(parameters) returnType {// 方法体
}

示例:

type MyInt intfunc (m MyInt) Add(other MyInt) MyInt {return m + other
}

在这个例子中,Add是MyInt类型的一个方法,它的接收者是MyInt类型的变量。

  1. 调用方式的区别

函数的调用很直接,只需要使用函数名并传入适当的参数即可。

result := Add(1, 2)

方法
方法的调用需要通过特定的类型实例来调用,这个实例称为方法的接收者。

var myInt MyInt = 5
result := myInt.Add(3)

在这个例子中,myInt是MyInt类型的实例,我们通过myInt来调用它的Add方法。

  1. 作用域的区别

函数
函数定义在包级别,意味着同一个包内的所有函数和方法都可以访问它(根据函数名首字母的大小写来决定访问权限)。函数不依赖于类型,所以它们的使用范围相对广泛。

方法
方法是绑定到特定类型的,这意味着方法的作用范围受到接收者类型的限制。只有该类型的实例才能调用这个方法。这使得方法可以用来实现与特定类型相关的操作和行为,实现了更好的封装和面向对象的设计。

自己的理解
在很多面向对象编程语言中,"类的成员函数"是类的一部分,用于操作或访问类的实例的数据。Go语言虽然没有类(Class)这个概念,但它通过结构体(Struct)和与之关联的方法来实现类似的面向对象编程模型。因此,从这个角度看,Go语言中的方法确实在概念上相当于其他语言中类的成员函数。

在其他一些面向对象的语言中,如Java或C++,类定义了数据(属性)和操作这些数据的函数(方法),它们被称为类的成员变量和成员函数。在Go语言中,你可以定义一个结构体来表示数据的结构,然后为这个结构体定义方法来操作这些数据,这样的方法可以看作是该结构体的“成员函数”。

示例对比
Go语言中的方法

type Person struct {Name stringAge  int
}// Person 类型的方法
func (p Person) Greet() string {return "Hello, my name is " + p.Name
}

在这个例子中,Greet函数是Person结构体的一个方法,它操作Person实例的数据。Person的每一个实例都可以调用这个方法。

其他语言中的类和成员函数
以Java为例:

public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String greet() {return "Hello, my name is " + this.name;}
}

在Java中,greet是Person类的一个成员函数,用于操作和访问类实例的数据。

总结
尽管Go语言的设计没有直接使用类(Class)这个概念,但通过结构体和方法提供了类似的功能。在Go中定义的方法,特别是当它们与特定的类型(如结构体)关联时,的确在逻辑上等同于其他语言中类的成员函数。
这种方式为Go语言提供了面向对象编程的能力,包括封装(通过结构体字段的导出控制)、继承(通过结构体的嵌入)和多态(通过接口)。

相关文章:

go中函数与方法的区别与go中关于面向对象理解

声明方法的区别 函数是一段可以独立调用的代码块,它可以有参数和返回值。函数的声明不依赖于任何类型,可以直接通过函数名进行调用。 函数的声明格式如下: func functionName(parameters) returnType {// 函数体 }示例: func A…...

SQL Server 实验二:数据库视图的创建和使用

目录 第一关 相关知识 什么是表 操作数据表 创建数据表 插入数据 修改表结构 删除数据表 编程要求 第一关实验代码: 第二关 相关知识 视图是什么 视图的优缺点 视图的优点 视图的缺点 操作视图 创建视图 通过视图向基本表中插入数据 通过视图修改基本表的…...

树结构导入

Testpublic void testExcel1() {// 写法1&#xff1a;JDK8 ,不用额外写一个DemoDataListener// since: 3.0.0-beta1EasyExcelFactory.read(new File("C:\\Users\\Admin\\Desktop\\树导入.xlsx"), null, new ReadListener<Map>() {public static final int BATC…...

Promise封装ajax

Promise封装原生ajax 1.node的内置模块url, http 2.Promise封装原生ajax 01-node的内置模块 # url: 操作网址 let url require(url) url.parse(网址, [布尔值: 决定是否将查询字符串转换为对象格式])&#xff1a; 将网址解析成对象# http: 创建本地服务器 let http requi…...

47 vue 常见的几种模型视图不同步的问题

前言 这里主要是来看一下 关于 vue 中的一些场景下面 可能会出现 模型和视图 不同步更新的情况 然后 这种情况主要是 vue 中的对象 属性没有响应式的 setter, getter 然后 我们这里就来看一下 大多数的情况下的一个场景, 和一些处理方式 当然 处理方式主要是基于 Vue.set, …...

以太网/USB 数据采集卡 24位16通道 labview 256K同步采样

XM7016以太网SUB数据采集卡 XM7016是一款以太网/USB高速数据采集卡&#xff0c;具有16通道真差分输入&#xff0c;24位分辨率&#xff0c;单通道最高采样率256ksps. 16通道同步共计4.096Msps、精密前置增益放大、集成IEPE/ICP硬件支持的特点。本产品采用了多个高精度24位ADC单元…...

python基础 | 核心库:PIL

1、读取图像信息 查看图像信息 读取同一文件夹下的文件 可加 ./可不加 rom PIL import Image img Image.open(image.jpg) # 打开图像文件(注意:是去掉文件头的纯数据) print(img.format) # 图像格式(如BMP PNG JPEG 等) print(img.size) # 图像大小(…...

#Linux系统编程(共享内存)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;什么是共享内存 共享内存是System V版本的最后一个进程间通信方式。共享内存&#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑…...

蓝桥杯备考随手记: practise01

问题描述: 小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff0c;在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40&#xff0c;共 28 个&#xff0c;他们的和是 574。 请问&#xff0c;在 1 到 2019 中&#xff0c;所有这样的数的和是多少&#xff1f; 思路分析…...

【openGL4.x手册09】转换反馈

目录 一、说明二、着色器设置2.2 捕获的数据格式2.2 高级交错2.3 双精度和对齐2.4 In-shader规范 三、缓冲区绑定四、反馈过程五、反馈对象5.1 反馈暂停和恢复5.2 绑定暂停的反馈对象。 六、反馈渲染七、局限性 一、说明 转换反馈是捕获由顶点处理步骤生成的基元的过程&#xf…...

记录一次报错提示npx update-browserslist-db@latest

1&#xff0c;定位文件夹位置 找到HBuilderX的安装目录, cmd切换到HBuilderX/plugins/uniapp-cli下 删除node_modules以及package-lock.json 在当前目录执行npm install 重新打开HBuilderX运行 2&#xff0c; 删除后&#xff0c;再次通过hbuilderX启动微信小程序&#xff0c;会…...

【Go】二、Go的基本数据类型

文章目录 0、进制1、变量的声明2、数据类型3、整型4、浮点型5、字符类型6、布尔类型7、字符串类型8、基本数据类型的默认值9、类型转换10、基本类型转String11、String转其他类型 0、进制 N进制&#xff0c;逢N进一 1、变量的声明 //声明 赋值 var age int 18//声明、赋值、…...

十一、Spring源码学习之registerListeners方法

registerListeners()方法 protected void registerListeners() {// Register statically specified listeners first.//获取容器中事件监听并存放到多播器中 applicationListenersfor (ApplicationListener<?> listener : getApplicationListeners()) {getApplicationE…...

Oracle 控制文件详解

1、控制文件存储的数据信息 1&#xff09;数据库名称和数据库唯一标识符&#xff08;DBID) 2&#xff09;创建数据库的时间戳 3&#xff09;有关数据文件、联机重做日志文件、归档重做日志文件的信息 4&#xff09;表空间信息 5&#xff09;检查点信息 6&#xff09;日志序列号…...

活体成像应用染料CY3.5-NHS星戈瑞

活体成像是一种生物医学研究的重要工具&#xff0c;它能够实时、无创地观察生物体内细胞和分子的动态变化。染料CY3.5-NHS&#xff0c;作为一种常用的活体成像染料&#xff0c;在许多生物医学研究中发挥着关键作用。本文将详细介绍染料CY3.5-NHS的特点、应用以及优势&#xff0…...

【优选算法】专题1 -- 双指针 -- 复写0

前言&#xff1a; 补充一下前文没有写到的双指针入门知识&#xff1a;专题1 -- 双指针 -- 移动零 目录 基础入门知识&#xff1a; 1. 复写零&#xff08;easy&#xff09; 1. 题⽬链接&#xff1a;1089.复习0 - 力扣&#xff08;LeetCode&#xff09; 2. 题⽬描述&#xff…...

GESP Python编程三级认证真题 2024年3月

Python 三级 2024 年 03 月 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&#xff0c;这个鸿蒙是&#xff1f;&#xff08; &#xff09; A. 小程序 B. 计时器 C. 操作系统…...

前端理论总结(css3)——link/import区别 // 伪类/伪元素

伪类/伪元素 1&#xff1a; 伪类使用1个冒号&#xff0c;常见的有&#xff1a;:hover&#xff0c;:link&#xff0c;:active&#xff0c;:target&#xff0c;:not()&#xff0c;:focus等 伪元素使用 2 个冒号&#xff0c;常见的有&#xff1a;::before&…...

ntp服务器搭建

1、手动修改时区 CST可以为如下4个不同的时区的缩写: 美国中部时间:Central Standard Time (USA) UT-6:00 澳大利亚中部时间:Central Standard Time (Australia) UT+9:30 中国标准时间:China Standard Time UT+8:00 古巴标准时间:Cuba Standard Time UT-4:00小结: UTC:…...

对象的内存布局

在Java虚拟机&#xff08;HotSpot&#xff09;中&#xff0c;对象在 Java 内存中的 存储布局 可分为三块&#xff1a; 对象头 存储区域实例数据 存储区域对齐填充 存储区域 对象头区域&#xff1a; 存储对象自身的运行时数据&#xff0c;如&#xff1a;哈希码、GC分代年龄、锁状…...

docker centos7离线安装ElasticSearch单机版

目录 1.下载ES并解压2.新建elasticsearch用户3.修改ES配置文件4.启动ES服务5.设置开机启动 本文以 elasticsearch-7.8.1为例。 1.下载ES并解压 cd /root/install wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz tar -z…...

【计算机网络】IP 协议

网络层IP协议 一、认识 IP 地址二、IP 协议报头格式三、网段划分1. 初识子网划分2. 理解子网划分3. 子网掩码4. 特殊的 IP 地址5. IP 地址的数量限制6. 私有 IP 地址和公网 IP 地址7. 理解全球网络&#xff08;1&#xff09;理解公网&#xff08;2&#xff09;理解私网&#xf…...

刷题DAY38 | LeetCode 509-斐波那契数 70-爬楼梯 746-使用最小花费爬楼梯

509 斐波那契数&#xff08;easy&#xff09; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1)…...

蓝桥杯-卡片换位

solution 有一个测试点没有空格&#xff0c;要特别处理&#xff0c;否则会有一个测试点运行错误&#xff01; 还有输入数据的规模在变&#xff0c;小心顺手敲错了边界条件 #include<iostream> #include<string> #include<queue> #include<map> #incl…...

Unity 布局控制器Content Size Fitter

Content Size Fitter是Unity中的一种布局控制器组件&#xff0c;用于根据其内容的大小来调整包含它的UI元素的大小。换句话来说就是&#xff0c;Content Size Fitter可以根据UI元素内部内容的大小&#xff0c;自动调整UI元素的大小&#xff0c;以确保内容能够正确显示。 如下图…...

Python的面向对象、封装、继承、多态相关的定义,用法,意义

面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用对象的概念来模拟现实世界的实体&#xff0c;并通过类&#xff08;Class&#xff09;来创建这些实体的蓝图。OOP的核心概念包括封装、继承和多态。 Python中的面向对象编程 在Python中&#xff0c;一…...

Elasticsearch 向量搜索

目标记录 ["你好&#xff0c;我的爱人","你好&#xff0c;我的爱妻","你好&#xff0c;我的病人","世界真美丽"] 搜索词 爱人 预期返回 ["你好&#xff0c;我的爱人","你好&#xff0c;我的爱妻"] 示例代码…...

2024蓝桥杯每日一题(背包)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;货币系统 试题二&#xff1a;01背包问题 试题三&#xff1a;完全背包问题 试题一&#xff1a;货币系统 【题目描述】 给定 V 种货币&#xff08;单位&#xff1a;元&#xff09;&#xff0c;每…...

Redis桌面客户端

3.4.Redis桌面客户端 安装完成Redis&#xff0c;我们就可以操作Redis&#xff0c;实现数据的CRUD了。这需要用到Redis客户端&#xff0c;包括&#xff1a; 命令行客户端图形化桌面客户端编程客户端 3.4.1.Redis命令行客户端 Redis安装完成后就自带了命令行客户端&#xff1…...

让Unity的协程变得简单

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢…...

重庆网站建设注意事项/快排seo

接上一篇 WPF多进程UI探索&#xff08;Like Chrome&#xff09; 找到了相对较靠谱的跨进程传递WPFUI的方法&#xff0c;本篇将对WPF多进程UI框架进行设计。 功能性需求 一个主进程作为宿主&#xff0c;承载多个子进程的UI每个子进程相互独立&#xff0c;互不影响主进程和子进程…...

python 发表wordpress/石家庄seo

上一篇&#xff1a;Windows安装diango框架<一> 创建项目&#xff0c;启动服务器 利用安装好的django包的django-admin.py创建项目&#xff0c;命令 python django-admin.py startproject mysite (注意 django-admin.py 路径 &#xff0c;mysite 是项目文件夹名字) mysi…...

专业做毕业设计网站/新媒体seo指的是什么

一、记录详细操作 # [] 表示可选的 # {}表示必选的 # 增 # insert [into] 表名[字段名] value|values(字段值....); # into 可省略 # [字段名] 可选 # 如果写了 你后面的值 必须与 写的字段匹配 # 不写 后面的值 必须和表的结构完全匹配 # va…...

在深圳帮人做网站/百度官方网站首页

5.7 跳转语句 这些语句可以立即将控制权转移到函数中的其他位置或从函数中返回控制权。 C 跳转语句执行控制的即时本地转换。 break; continue; return [expression]; goto identifier; 5.7.1 break语句 break 语句可终止执行最近的封闭循环或其所在条件语句。 控制权将…...

管理公司网站建设/推广引流哪个软件最好

作为一名大数据领域的从业者&#xff0c;我来回答一下这个问题。​在大数据技术的推动下&#xff0c;随着数据价值的不断提高&#xff0c;关于个人隐私的安全问题受到了更多的关注&#xff0c;关于如何在大数据时代保护个人隐私(数据安全)也是目前不少研究生的研究课题。大数据…...

周口学做网站/网站之家

2019独角兽企业重金招聘Python工程师标准>>> 一、点击链接 https://natapp.cn/ 注册个免费的账户 NATAPP官网 二、登陆进去以后查看authtoken。复制这个&#xff0c;等下要在客户端用到&#xff01; 分配的authtoken 三、点击右侧配置&#xff0c;做一下配置&#x…...