【Go语言】面向对象编程(一):类的定义、初始化和成员方法

面向对象编程(一):类的定义、初始化和成员方法

1 类的定义和初始化

Go 语言的面向对象编程没有 classextendsimplements 之类的关键字和相应的概念,而是借助结构体来实现类的声明,如下是定义一个学生类的方法:

type Student struct{id uintname stringmale boolscore float64
}

类名为 Student,并且包含了 idnamemalescore 这四个属性。

相应的,Go 语言中也不支持构造函数、析构函数,需要我们自定义形如 Newxxx 这样的全局函数(首字母大写)作为类的初始化函数方法:

// 初始化方法(全量定义)
func NewStudent(id uint, name string, male bool, score float64) *Student {return &Student{id, name, male, score}
}

在如上函数中,通过传入 NewStudent 方法的字段对 Student 类进行初始化,并返回一个指向该类的指针。此外,还能够初始化指定字段,如下所示:

// 初始化方法(部分定义)
func NewStudentPart(id uint, name string, score float64) *Student {return &Student{id: id, name: name, score: score}
}

main 方法中调用初始化的方法,打印如下:

// 类的初始化
student := GoClass.NewStudent(1, "南歌", false, 100)
fmt.Println(student)
// male未定义,会默认为male的零值false
student2 := GoClass.NewStudentPart(1, "南歌", 100)
fmt.Println(student2)

在这里插入图片描述

2 成员方法

同上所述,Go 语言中的成员方法也需要编写函数方法来实现,主要有 值方法指针方法,两种方法的使用分别如下:

值方法

func (s Student) GetName() string  {return s.name
}

通过定义的 GetName() 方法,就可以在初始化 Student 类后,调用 GetName() 成员方法,使用如下:

student := GoClass.NewStudent(1, "南歌", false, 100)
fmt.Println("Name:", student.GetName())

在这里插入图片描述

注意:我们通过在函数签名中增加接收者声明的方式定义了函数所归属的类型,这个时候,函数就不再是普通的函数,而是类的成员方法了。

指针方法

上面的 值方法 只能够进行函数属性的读取,而不能做修改,可以使用如下方法简单进行测试。

func (s Student) SetName(name string) {fmt.Println(s)s.name = namefmt.Println(s)
}

main 函数中调用 SetName 方法,如下所示:

student3 := GoClass.NewStudent(1, "南歌", false, 100)
fmt.Println("Name:", student3.GetName())
student3.SetName("euansu")
fmt.Println("Name:", student3.GetName())

在这里插入图片描述

如上所示,在调用 SetName() 的时候,Student 并未接收函数的返回,因此即使修改了 s.name,但是类 Student 的属性也未被修改,如果要修改类 Student 的属性,就需要通过指针方法对其进行修改,如下所示:

func (s *Student) SetName(name string) {s.name = name
}

main 函数中按照如下方法进行调用。

student4 := GoClass.NewStudent(1, "南歌", false, 100)
fmt.Println("Name:", student4.GetName())
student4.SetName("euansu")
fmt.Println("Name:", student4.GetName()

在这里插入图片描述

3 总结
  1. Go 语言与其他编程语言相比,弱化了类的概念,而是使用结构体定义类,类内部的数据类型与普通的数据类型一样,内置的数据类型也可以通过关键字指定为包含自定义成员方法的类。
  2. Go 语言中,类的成员方法有两种,分别是值方法和指针方法,其中值方法主要是用做读取类成员属性的场景,而指针方法则是用作修改类成员属性的场景。

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

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

相关文章

Virtual Memory Primitives for User Program翻译

Virtual Memory Primitives for User Program 安德鲁阿普尔(Andrew Appel)和李凯(Kai Li) 普林斯顿大学计算机科学系 摘要 传统上,内存管理单元(MMUS)被操作系统用于实现磁盘分页的虚拟内存…

Element ui 快速入门

Element UI 是一套基于 Vue.js 的桌面端组件库,它提供了一系列易用、美观、高度可定制的组件,可以帮助开发者快速构建出优秀的用户界面。 以下是 Element UI 的快速入门步骤: 安装 Element UI:在项目中使用 npm 或者 yarn 安装 …

FullCalendar日历组件集成实战(9)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

一文详谈大模型 RAG 优化方案与实践

暑期实习基本结束了,校招即将开启。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。提前准备才是完全之策。 最近,我们又陆续整理了很多大厂的面试题&#xff0c…

肾合与出汗:一场你不得不关注的健康对话

设想一下,我们的身体就像是一部精妙复杂的交响乐,每一个细胞、每一个组织都是乐符,共同编织出生命的旋律,演绎着我们的过去与未来。而汗水,就如同交响乐中的琴弦振动,它流淌在我们的体表,记录着…

wordpress站群搭建1需求分析

海鸥技术下午茶-wordpress站群搭建1需求分析 站群是什么 站群,即一个人或一个团队操作多个网站,目的是通过搜索引擎获得大量流量,或者是将链接指向同一个网站,以提高搜索排名。 站群包括哪些功能 站点管理 内容管理 数据统计和分…

电商API接口接入||电商比价项目比价系统搭建需要注意哪些?

在搭建一个淘宝/京东比价系统时,需要注意以下几个方面,以确保系统的有效性、准确性和用户友好性: 确定平台和商品范围: 明确系统覆盖的电商平台,如淘宝、京东等。确定要比较的商品类别和范围,以确保数据的…

APIGateway 私有API的VPC endpoint是否开启DNS有什么区别

APIGateway 私有API的VPC endpoint是否开启DNS有什么区别 未启用私有DNS 从vpc内访问APIGateway regional api(非私有API)不受影响,会将APIGateway的解析为公有IP $ curl https://region-app-id.execute-api.cn-north-1.amazonaws.com.cn/de…

JFinal学习06 控制器——getPara()接收数据

JFinal学习06 控制器——getPara()接收数据 视频来源https://www.bilibili.com/video/BV1Bt411H7J9/?spm_id_from333.337.search-card.all.click 文章目录 JFinal学习06 控制器——getPara()接收数据零、JFinal数据提交的三种方式一、get提交二、post提交三、url参数化提交四、…

【设计模式之外观模式 -- C++】

外观模式 – 统一接口,简化调用 外观模式(Facade Pattern)是一种常用的软件设计模式,它为子系统中的一组接口提供了一个统一的高层接口,使得子系统更易于使用。外观模式定义了一个高层接口,这个接口使得这…

北航数据结构与程序设计第五次作业选填题复习

选填题考的很多都是基础概念,对于巩固复习一些仡佬拐角的知识点是很有用的。非北航学生也可以来看看这些题,这一节主要是树方面的习题: 一、 我们首先需要知道一个公式 这是证明: 知道了这个公式,我们把题目中的数据…

猫头虎分享:2024应届生择业在大模型和智能机器人之间该如何选择?

猫头虎分享:2024应届生择业在大模型和智能机器人之间该如何选择? 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的…

wallless ios

登陆官网 wallless 然后跟着使用文档就可以了,主要得买一个账号,之后就可以一键导入自己已经买了的节点信息了。

B树与B+树与Mysql innodb的B+树和其相关索引

文章目录 前言B树与B树与Mysql innodb的B树和其相关索引1. B树2. B树3. Mysql上的Innodb 的B树4. 基于 innodb的B树说索引5. mysql中的数据类型转换需要注意哪些事项 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊&#xff…

如何在Bing搜索进行广告推广?2024年必应广告投放怎么做?【附开户攻略】

必应(Bing)作为全球领先的搜索引擎之一,拥有一个独特且庞大的用户群体,尤其在美国和欧洲市场,很多用户选择必应作为他们的主要搜索引擎。通过必应广告,企业可以触达那些在其他搜索引擎上难以接触到的潜在客…

自定义打印外观

以下示例代码演示了如何将打印外观和背景颜色自定义应用于网格控件中的偶数行。 gridView1.OptionsPrint.UsePrintStyles true; // Enable the AppearancePrint.EvenRow propertys settings. gridView1.OptionsPrint.EnableAppearanceEvenRow true; // Set the background c…

【机器学习】基于3D CNN通过CT图像分类预测肺炎

1. 引言 1.1. 研究背景 在医学诊断中,医生通过分析CT影像来预测疾病时,面临一些挑战和局限性: 图像信息的广度与复杂性: CT扫描生成的大量图像对医生来说既是信息的宝库也是处理上的负担。每组CT数据可能包含数百张切片&#xf…

【Excel技巧】Excel打开密码的两种设置方法!

excel文件打开密码可以再打开文件时输入密码查看文件内容,这样就可以保护文件内容不被任何人查看了,今天分享excel打开密码的两种设置方法给大家。 方法一: 点击excel中的【文件】功能,找到【信息】-【保护工作表】-【用密码进行…

Spring6

一 概述 1.1、Spring是什么? Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测…

2024年计算机相关专业是否还值得选择

目录 1.概述 1.1.就业前景 1.2.个人兴趣与能力 1.3.专业发展与趋势 1.4.市场饱和度与竞争 1.5.建议与展望 2.行业竞争现状 2.1.行业饱和度 2.2.新兴技术的影响 2.3.人才需求的变化 2.4.行业内的创新动态 2.5.保持从业者的竞争力 2.6.小结 3.专业与个人的匹配度判断…