Go语言的面向对象

Go语言的面向对象编程 我们可以使用type关键字定义一个结构体。例如,以下是一个表示PersongoAge int这里,PersonName和Age。go在这里,p是Person类型的接收者。通过p,我们可以访问Person的字段。go任何实现了Greet方法的类型都将被视为Greeter接口的实现。 阅读详情

Go语言的面向对象

1 基本介绍

(1)Go语言中没有类概念

Go语言没有类,结构体提供了绑定数据和方法的行为,可借助结构体解决面向对象的多态的问题。

(2)Go语言中函数和方法是不同的概念

个人理解,函数是具有独立功能的代码块,方法是对象行为的代码块,方法的本质是函数。在Go语言中两者最明显的区别是方法有接受者,函数无接收者。

(3) Go语言中空接口

Go语言接口是一组方法签名。空接口是指没有定义任何方法的接口,任何类型的数据都可以实现空接口,且它的内部实现了保存对象的类型和指针,因此它能够灵活保存抽象数据。Go语言中空接口很常用。

(4)duck typing

Go属于duck typing类型语言,即”动态类型语言“或者”解释型语言“,类似于python、Javascript、Ruby语言。

2 对象方法

obj_method.go

package main

import (
	"fmt"
)

// 定义结构体
type Person struct {
	name, sex string
}

/*
// 方法定义,官方建议使用“接收者类型”的首字母的小写作为“接收者变量”的名字
// 如果返回值参数列表没有返回值,或者只有一个返回值,可以不要括号“()”
func (接收者变量, 接收者类型) 方法名称(输入参数列表) (返回值参数列表){
}

// 函数定义
func 方法名称(输入参数列表) (返回值参数列表){
}
*/

// 方法
func (p Person) eating(food string) string {
	fmt.Println("方法内:", p.name+" is eating "+food)
	return "Beautiful " + food
}

// 主入口
func main() {
	person := Person{"Mason", "male"}
	msg := person.eating("Apple")
	fmt.Println("返回值:", msg)
}

执行obj_method.go

# go run obj_method.go
方法内: Mason is eating Apple
返回值: Beautiful Apple

3 对象继承

obj_inherit.go

package main

import "fmt"

type Person struct {
	name string
	sex  string
}

// 方法
func (p Person) eating(food string) string {
	fmt.Println("方法内:", p.name+" is eating "+food)
	return "Beautiful " + food
}

// 方法继承,使用定义了方法的匿名字段即可实现继承
type Teacher struct {
	// 继承Person,Person没有属性名称是匿名字段
	Person
	// 老师教的科目
	subject string
}

// 方法继承
type Student struct {
	// 继承Person
	Person
	// 学生作业
	work string
}

func main() {

	// 实现类
	teacher := Teacher{Person{"Teacher", "male"}, "Chinese"}
	student := Student{Person{"Student", "male"}, "Learn Chinese"}

	// 调用方法
	teacher.eating("Apple")
	student.eating("Banana")

}

执行obj_inherit.go

# go run obj_inherit.go  
方法内: Teacher is eating Apple
方法内: Student is eating Banana

4 对象多态(接口)

obj_interface.go

package main

import "fmt"

// 接口是一组方法的集合
/*
// 接口定义,如果返回值参数列表没有返回值,或者只有一个返回值,可以不要括号“()”
type 接口名称  interface {
	方法1(输入参数列表1) (返回值参数列表1)
    方法2(输入参数列表2) (返回值参数列表2)
	……
	方法N(输入参数列表N) (返回值参数列表N)
}

// 接口实现,如果返回值参数列表没有返回值,或者只有一个返回值,可以不要括号“()”
func (接收者变量, 接收者类型) 方法1(输入参数列表1) (返回值参数列表1){

}
func (接收者变量, 接收者类型) 方法2(输入参数列表2) (返回值参数列表2){

}
……
func (接收者变量, 接收者类型) 方法N(输入参数列表N) (返回值参数列表N){

}

*/

// 定义接口
type Person interface {
	eating(food string) string
}

// 定义结构体
type Teacher struct {
	name string
}

type Student struct {
	name string
}

// 使用Teacher结构体实现方法
func (t Teacher) eating(food string) string {
	fmt.Println("The " + t.name + " eating " + food)
	return "Good teacher"
}

// 使用Student结构体实现方法
func (s Student) eating(food string) string {
	fmt.Println("The " + s.name + " eating " + food)
	return "Good student"
}

func main() {

	var person Person

	teacher := Teacher{"Teacher"}
	student := Student{"Student"}

	// 实现多态
	person = teacher
	person.eating("Apple")

	person = student
	person.eating("Banana")

}

执行obj_interface.go

# go run obj_interface.go
The Teacher eating Apple
The Student eating Banana
【Golang】Go语言中如何面向对象? Go语言(Golang)虽然不是一个纯粹的面向对象编程语言,但它通过结构体(Struct)、接口(Interface)等机制,提供了面向对象的编程范式。 在实际的项目开发中,使用面向对象的理念可以显著提高代码的可维护性、可扩展性和可复用性。 阅读详情

相关推荐

带挂牵引车前向运动模型推导及仿真实现

牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。

jianmo的博客 3182

GO语言中的类?(结构体和方法)

GO语言中没有类的概念,也不支持类的继承等面向对象的概念。GO语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。

Go-Hello的博客 3217

基于PLC的矿用排水控制系统设计【附代码】

(3)矿用排水控制系统的软件设计 研究设计了矿用排水控制系统的软件,包括PLC程序的编写和上位机监控画面的设计。(2)矿用排水控制系统的硬件设计 研究对矿用排水控制系统的硬件进行了选型和设计,包括矿用多级耐磨离心泵、三相异步防爆电机等执行设备的选型,以及控制系统所需用到的各类型传感器、PLC的I/O点分配及选型。(1)矿用排水控制系统的现状分析 研究首先对矿井排水系统的现状进行了分析,指出了现有系统存在的问题,如自动化程度低、劳动强度大、设备维护困难等。✅ 具体问题可以私信或查看文章底部二维码。

lagougongzuoshi的博客 1173

go语言初探 八

结构体、方法、接口 Go 语言中没有“类”的概念,也不支持像继承这种面向对象的概念。但是Go 语言的结构体与“类”都是复合结构体,而且Go 语言中结构体的组合方式比面向对象具有更高的扩展性和灵活性。 结构体定义: type identifier struct { field1 type1 field2 type2 … } 结构体实例创建 s1 := new(Student) //第一种方式 s2 := Student{“james”, 35} //第二种方式 s3 := &Student { //第

qq_42642972的博客 376

QCustomPlot实战:从入门到精通的数据可视化

本文详细介绍了如何使用QCustomPlot进行数据可视化,从基础环境搭建到高级图表定制,涵盖实时监控、多坐标系联动等实战技巧。基于Qt的QCustomPlot库以其强大的绘图能力和灵活的API,帮助开发者快速实现专业级数据可视化效果。

weixin_29003437的博客 115

restbed编译笔记

Restbed 可以构建出基于asio库的restfulAPI服务,Restbed 4.7版本使用了1.12.0版本的asio(其他版本编译不通过),可直接访问github下载:https://github.com/chriskohlhoff/asio/tree/asio-1-12-0。另外Restbed还依赖openssl库(可直接下载exe的安装包,安装后取出lib库及头文件放到到restbed\dependency\openssl中即可,https://slproweb.com/download/W.

mahong100的博客 2106

go语言(7)

面向对象 1.go语言没有类,其结构体相当于类的作用;

weixin_43823255的博客 444

手把手教你用Arduino和开源电路DIY一个手机连接的电化学传感器(附GitHub源码)

本文详细介绍了如何利用Arduino和开源电路DIY一个手机连接的电化学传感器,成本不到300元即可复现价值数千元的专业设备。从硬件选型、电路搭建到固件开发和手机应用实现,手把手教你完成整个项目,特别适合科研人员、环境监测爱好者和理工科学生。附GitHub源码,方便快速上手和扩展功能。

weixin_42561040的博客 336

GO(C、C++、Python)语言的认识(一)

结构体用于封装数据(字段),相当于类中的成员变量。// 定义一个 Person 结构体,包含 Name 和 Age 两个字段Name string // 姓名Age int // 年龄结构体(struct)相当于 “类” 的属性定义,用于存储数据。方法(通过接收器绑定到结构体)相当于 “类” 的方法,用于定义行为。指针接收器用于修改结构体实例的数据,值接收器用于只读操作。这种方式虽然没有 “类” 的关键字,但能实现类的核心功能(封装、数据与行为绑定)。Go 没有传统的 “继承”,但通过。

AlbenXie的博客 1214

金蝶Apusic应用服务器 未授权目录遍历漏洞复现

由于金蝶Apusic应用服务器/admin/protected/selector/server_file/files、/admin/protected/selector/server_file/folders 等接口没有进行校验和过滤,直接将参数拼接到文件操作中,导致出现目录遍历漏洞,未经身份验证的远程攻击者可通过此漏洞读取系统内部系统文件路径及信息,导致信息泄露,系统处于极不安全状态。

0xSec 2169

华为OD机考双机位C卷 - 打印机队列 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 打印机队列

算法大师! 4619

编程语言-go:类与对象的概念

go中没有类和对象的概念,只有struct和变量与之对应 1,定义“类”: struct type Books struct{ title string author string id int } 2, 创建“对象”: 变量 var book1 Books book1.title="go-languange" book1...

eyeofeagle的博客 2682

如何利用Dpabi,AFNI,FSL软件计算种子点的功能连接?

fsl_glm 得到的是线性回归系数(beta coefficient),由于在自变量和因变量标准化(均值为 0,标准差为 1)的情况下,简单线性回归的回归系数和皮尔逊相关系数是相同的,因此这是一种间接的方法。(3)上一步得到的 PCC.nii.gz 文件是 Harvard-Oxford 概率模板中的后扣带回,每个体素中的数值(1-100)表示该体素属于 PCC 的概率,反映 PCC 在不同被试中的变异大小,也表示我们对于某个体素属于PCC 的信心。接下来,我们来聊聊功能连接在数据处理里的具体应用。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 7842

【Golang 基础】Go 语言 面向对象

Go 语言的面向对象   Go 语言的面向对象非常简单,仅支持封装,不支持继承和多态。继承和多态是在接口中实现的。   因此 Go 语言中没有 class,而是通过 struct(结构体)对相同类型或不同类型的数据进行封装。 通过 type <structName> struct {}格式定义结构体; type User struct { Name string Age...

hvkCoder的博客 419

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 内容有Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态,面向对象编程应用实例,golang的接口介绍,类型断言 配套视频自己去B站里面搜【go语言】,最高的播放量就是 里面的注释我写的可能不太对,欢迎大佬们

雪花凌落的盛夏 1815

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Golang基础(go语言的面向对象:封装、继承、接口、多态、断言)

一.面向对象和面向过程 面向过程编程代码只适用于当前情况,而面向对象编程更注重重用,同一套代码可以使用多样的情况 面向过程编程(OPP)就是详细的按照顺序的把整个过程实现 例如:学生从家里去上学需要出门-->找到OFO-->扫描开锁-->上车-->直行-->左拐-->找到”粥饼面”-->停车-->上锁-->开门--> 找到座位-->点山东煎饼和四川火锅-->上菜-->吃饭-->现金付钱-->出

qq_31387691的博客 841

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

GO语言使用之面向对象编程(1)——Golang语言面向对象编程说明

Golang语言面向对象编程说明 1、 Golang也支持面向对象编程(OOP[object oriented programming]),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性。 2、 Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于s...

Science Explorer 954

Golang_08: Go语言 接口 与 面向对象

接口类型 是对其他类型行为的概括和抽象,一个接口类型约定了有零个或多个方法。Go 语言的接口不需要显式实现,一个类型只要拥有一个接口约定的所有方法,那么就表示该类型实现了这个接口。对于一个具体的类型,也不需要声明它实现了哪些接口。接口类型属于引用类型,其零值为空指针 nil。

谢TS的博客 679

Golang 入门系列(五)GO语言中的面向对象

Golang 入门系列(五)GO语言中的面向对象 前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友可以先看看之前的文章。https://www.cnblogs.com/zhangweizhong/category/1275863.html。 今天GO语言中的面向对象。   GO语言中的面向对象   其实GO并不是...

章为忠的专栏 136

【golang/go语言】Go语言中的面向对象OOP

【代码】【golang/go语言】Go语言中的面向对象OOP。

zuzhiang的博客 388

go语言的面向对象详解

Name, StuNum, Address string //批量定义三个String类型stu Student //继承Student 的所有属性Age int //年龄Scores [2]float32 //数组保存语文和数学的考试成绩TopPtr *int //int类型的指针,用于排名SliceIndex []int //int类型的切片,定义学生各项指数,使用的时候需要make。

2302_79993788的博客 1222

Go语言中面向对象

Go语言面向对象: Go语言中没有明确的OOP(Object Oriented Programming)概念, Go语言中只提供了两个关键类型:struct和interface,struct与C++的普通类相似,interface对应的是抽象类的类型。 面积对象是借助struct结构体实现的,interface则是定义接口的。 一、类的封装 示例讲解: 首先我们定义一个汽...

数据与工程工作,AI大模型应用 882

视频教程-桫哥-GOlang-05面向对象-Go语言

桫哥-GOlang-05面向对象 多年互联网从业经验; 有丰富的的企业网站、...

weixin_32212845的博客 312

Go语言和Java的面向对象比较

用写论文的心态写博客 中国的百度百科上对Go语言是这样阐述的:“Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言”。维基百科上对Go语言是这样阐述的:“Go (also referred to as Golang) is a statically typed, compiled programming language designed...

萌猫芭乐主人的博客 1109

go是面向对象语言吗?

转载链接:https://segmentfault.com/a/1190000001832282#articleHeader5 原文链接:http://spf13.com/post/is-go-object-oriented 前言 面向对象的含义引入了对象(object)、类(class)、继承(inheritance)、子类(subclass)、虚方法(virtual method)、协程...

Flyer的后花园 921
上一篇: Gin环境搭建
下一篇: Go语言的并发
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值