Go语言基础(十三)—— Go面向对象简单小练习

《Go语言程序设计》第4章练习 4.1 写一程序求y值(x值由键盘输入)。 y = (sinx+cosx)/2,  x>=0 y = (sinx-cosx)/2,   x package main import ( "fmt" "math" ) func main() { var x, y float64 fmt.Scan(&x) if x >= 0 { y = (math.Si 阅读详情

练习要求:

接口->父类实现->多种子类实现->多态

  1. 定义接口IPerson,定义吃喝睡三个抽象方法;

  2. 定义一个IPerson的实现类Person,实现吃喝睡方法;

  3. 定义IWorker劳动者接口,拥有劳动方法Work()(output string)其中output是其工作产出,和休息方法Rest();

  4. IWorker实现三个不同职业的子类:程序员Coder、老师Teacher、农民Farmer,并创建一个Worker的集合;

  5. 实现周一到周五全体工作,如果是周六日程序员工作其他人休息;

案例实现:

package main

import "fmt"

//定义IPerson接口
type IPerson interface {
	Eat();
	Drink();
	Sleep();
}

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

//Person实现接口的Eat方法
func (pp *Person) Eat() {
	fmt.Println("我是Person,这是我的eat方法")
}

//Person实现接口的Drink方法
func (pp *Person) Drink() {
	fmt.Println("我是Person,这是我的Drink方法")
}

//Person实现接口的Sleep方法
func (pp *Person) Sleep() {
	fmt.Println("我是Person,这是我的Sleep方法")
}

//定义IWorker接口
type IWorker interface {
	Work() (output string);
	Rest()
}

//coder实现类
type Coder struct {
	Person
}

//Coder实现IWorker的Work方法
func (coder *Coder) Work() (output string) {
	fmt.Println("I am Coder,this is my Work method!")
	return "代码"
}

//Coder实现Rest方法
func (coder *Coder) Rest() {
	fmt.Println("I am Coder,this is my Rest method!")
}

//teacher实现类
type Teacher struct {
	Person
}

//Teacher实现work方法
func (teacher *Teacher) Work() (output string) {
	fmt.Println("I am teacher ,this my Work method !")
	return "students"
}

//Teacher实现Rest方法
func (teacher *Teacher) Rest() {
	fmt.Println("I am teacher ,this my Rest method !")
}

//farmer 实现类
type Farmer struct {
	Person
}

//Farmer实现work方法
func (farmer *Farmer) Work() (output string) {
	fmt.Println("I am Farmer,this is my work method !")
	return "foods"
}

//Farmer实现Rest方法
func (farmer *Farmer) Rest() {
	fmt.Println("I am Farmer,this is my Rest method !")
}

func main() {
	//声明结构体
	var coder Coder
	var teacher Teacher
	var farmer Farmer
	
	
	coder.name = "wek"
	teacher.name = "wrr"
	farmer.name = "WEK"
	
	//声明IWorker接口方面统一管理
	worker := make([]IWorker, 0)
	worker = append(worker, &coder)
	worker = append(worker, &teacher)
	worker = append(worker, &farmer)

	//如果是工作日,则所有人工作
	fmt.Println("今天是工作日")
	for _, workers := range worker {
		workers.Work()
	}

	//如果是休息日,则只有coder工作,其余人休息
	fmt.Println("今天是休息日")
	for _, workers := range worker {
		if _, ok := workers.(*Coder); ok {
			workers.Work()
		} else {
			workers.Rest()
		}
	}
}

结果为:

golang开发工程师-第一步:golang入门基础教学 golang基础知识点,不详细 阅读详情

相关推荐

十三、Golang 中的接口详解

type 接口类型名 interface{方法名1( 参数列表1 ) 返回值列表1方法名2( 参数列表2 ) 返回值列表21.接口名:使用type将接口定义为自定义的类型名。Go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有字符串功能的接口叫Stringer等。接口名最好要能突出该接口的类型含义。2.方法名:当方法名首字母是大写且这个接口类型名首字母也是大写时,这个方法可以被接口所在的包(package)之外的代码访问。

阿澈不吃蒜的博客 1331

GO 接口详解

在go语言中,接口是一种就是一种类型。同map、struct等的定义,语法是一样。 如: type People interface { Speak(string) string } 关键字是interface。此时就称People是一个接口。 接口的作用就是定义一些对象的共同特征,特征以接口内的方法来定义。如上例的speak方法。 具有上述特征的类型,那就称它实现了这个接口。语法如下: // 定义类型Student,它是一种struct类型 type Student struct{}

baidu_41917849的博客 2697

量化实战:如何用Barra多因子模型给你的投资组合做一次‘风险体检’?

本文详细介绍了如何利用Barra多因子模型对投资组合进行全面的风险体检,帮助投资者识别行业和风格因子的风险暴露。通过实战案例和Python代码示例,展示了数据采集、风险归因和组合优化的完整流程,提升投资组合的风险调整收益。

weixin_27215337的博客 323

比较经典的前端面试题二

基础题: 1. 实现下面这个方法: 将一维数组切分成二维数组: 按照第二个参数(数字)的值,来决定二维数组长度 let a = ['a', 'b', 'c', 'd']; // let result = chunk(a, 3); // console.log(result) => [['a','b', 'c'], ['b']]; // let result = chunk(a, 2); //...

chong2230的专栏 407

SMRATS(一) SMARTS+PPO baseline运行教程

python类方法 class Agent: @classmethod def from_function() python typing 含义 为防止弱类型python出现忘记变量类型的问题,python3.5及之后版本增加了对应的类型提示。 输入和输出类型 函数接受并返回一个字符串,注释像下面这样: def greeting(name: str) -> str: return 'Hello ' + name 常用的typing类型 int,long,float: 整型,

Freshduke的博客 1413

从CAD到Web:高效转换STEP/IGES模型为GLB格式的实践指南

本文详细介绍了如何将工业设计中的STEP/IGES模型高效转换为Web友好的GLB格式。通过PythonOCC和gltf-pipeline等工具链,实现从CAD到Web的无缝转换,大幅提升模型加载速度和展示效果。文章包含实战案例、优化技巧和常见问题解决方案,帮助开发者快速掌握3D模型转换技术。

weixin_29072299的博客 507

go语言练习题

1、统计字符串中单个字符出现的次数 例:输入:sArHaiAoderAama 统计 A的个数 不区分大小写 输出:5 ```go func test1(str string) { fmt.Println(strings.Count(str, "A") + strings.Count(str, "a")) } ``` 2、字符串分隔 输入一个字符串,请按长度为8拆分每个输入字符串并进行输出; 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 例如:输入:abc, 输出:......

weixin_44837729的博客 1048

XTDrone平台FAST-LIO2与ego-planner结合路径规划部署

之前做了XTDrone平台FAST-LIO2的部署现在将其结合ego-planner进行导航规划,之前查看教程是使用视觉进行定位导航的,现在重新学习。修改advanced_param_xtdrone.xml,这里有视觉信息,不修改会报错显示为输入视觉话题信息。怎么描述 ,感觉当时觉得很难的问题突然就给解决了,一顿复杂,最近勤更新吧,继续开始学习。还有一个想法就是两个rviz结合在一起启动,写了一个demo,融合的不太好感觉额。改为只使用雷达点云,这里仿真的话题是/scan。

m0_56093217的博客 1081

Go:常用语法练习(一)

Go:常用语法练习——打印输出&变量&指针&字符串

Liu_y_xin的博客 1524

【Creator】cocoscreator 2.4 apk还原为工程 (1)

Cocos Creator 2.4 还原图片 meta文件

jokesuser的博客 2260

SAP BSIS:总账未清项表(Open Items)总账未清项 包含哪些业务 请给以举例说明

SAP总账未清项是指需要未来核销的会计行项目,仅适用于勾选"未清项管理"的总账科目。典型业务场景包括:供应商预付款(借方未清项)、员工备用金(借方未清项)、客户预收款(贷方未清项)和保险理赔(借方未清项)。系统通过表BSIS/BSAS跟踪未清项,支持明细追踪和账实核对。核心价值在于提供总账级别的明细管理能力,确保往来款项完整清账,简化对账流程,满足特殊业务管理需求。可通过FBL3N事务码查询和管理所有总账未清项。

金牌架构师 723

【Go】十三、面向对象:方法

如果一个类型实现了String()这个方法,那么fmt.Println输出这个类型的变量时,默认会调用这个类型中的String()进行输出,Java的toString。注意上面能访问到,一者该结构体名称首字母大写,public,二者访问时带了包名.结构体名称。同函数,方法名首字母小写,只能在本包访问,方法首字母大写,可以在本包和其它包访问。type重新定义(相当于取别名),Go认为是新的数据类型,但是相互间可以强转。结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是值拷贝传递方式。

llg___的博客 827

YOLOv8 改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南。

weixin_39818775的博客 1073

十三、Go语言基础之函数

函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。 函数 Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。 函数定义 Go语言中定义函数使用func关键字,具体格式如下: func 函数名(参数)(返回值){ 函数体 } 其中: 函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名(包的概念详见后文)。 参数:参数由参数变量和参数变量的类型组成,多个参数之间使用,

Dove_1234的博客 296

STM32智能小车控制舵机转向

文章目录前言一、舵机简单介绍及接线方式二、cubeMX配置三、代码解析总结 前言 本文将带大家学习如何驱动舵机转向 一、舵机简单介绍及接线方式 信号线(黄线)红线(电源线)棕色(地线) 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2

m0_49476241的博客 8613

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Go】【ChatGPT】关于 Golang 的稍微底层的简单问题

关于Golang的一些想到的问题,仔细探究下。

天启疯车 1979

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最标准的Go学习路线:小姐姐偷偷带你学Go语言, 2021年,一起let‘s go(未完结)

本文提供了Go学习的详细进阶路线图,列出了学习Go开发所需的各类知识和技能,而且每个知识点也附上啦相应的学习资源。相信无论是零基础的新手,还是对Go语言有一定了解的开发者,都能够有所收获。小姐姐偷偷带你学Go语言,2021年,一起let‘s go(未完结)。

weixin_54707168的博客 1183

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ssm框架搭建

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

想系统学习GO语言(Golang),能推荐几本靠谱的书吗?

以下内容来自知乎: 学习任何一门语言,都要学习好基础,把基础打牢,那些框架对你来说都是工具,你自己的基础好,懂得了他们的原理,自己就可以创造更优秀的框架。 基础推荐官方文档,没有什么比这个更清晰了。官方文档可以看这个中文的,比较快一些 https://go-zh.org/doc/ 其次参考这个Go指南,练习一遍 https://tour.go-zh.org/welcome/1 现在对Go语言应该有了一个全面的认识,然后你再结合Go语言圣经这本书,深入理解Go的基础。 Go语言圣经中文版 https

Mick_^_^的博客 8341

【Golang入门】一、搭建Go开发环境

搭建Go的开发环境,主要是安装和配置SDK (Software Development Kit, 软件开发工具包),包含了对应语言开发的工具包。首先需要下载Golang的SDK,下载地址点击 Golang SDK下载地址。选择下载对应的 .zip文件,解压即可。注意安装路径中不能出现中文名和特殊字符。 一、检查是否安装成功 通过控制台我们可以检查一下Golang是否安装成功: step 1: 通过键盘操作 win+r,输入cmd打开控制台。 step 2: 通过指令 cd + 安装路径 进入Golang的

markscientist的博客 1888

golang基础教程(十三)、接口、多态_go-courier husky golang

其中cat 继承了接口annimal ,HelloKitty实现了cat接口;不必将所有的方法都实现(继承和java不同)test方法中传入了一个animal对象,在实际调用时会因传入对象的不同而得到不同的效果。判断具体的类型,在go中可以使用 对象.(指定的类型) 判断改对象是否时指定的类型。(img-BzCBCDPP-1713131288553)]方法被实现时用的是值接受者。有了接口就可以实现多态了。

2301_79099473的博客 809

【十三】Golang 通道

通道就是 golang 中实现 Goroutine 之间通信的机制。它是一种类型化的通道,允许多个 Goroutine 之间安全地传递数据。通道是 Golang 并发模型的核心,它解决了传统并发编程中共享内存带来的复杂性和风险。

业精于勤而荒于嬉,行成于思而毁于随 1208

GO语言基础案例讲解

二. 类型转换 三.包类型转换 四.包的应用 五.的使用和牛顿法逼近平方根 六. 指针的使用和自定义结构体 七. 🔺数组和切片 八. 切片和切片数组的使用(make) 九.切片的遍历 十. 自定义数值生成二维数组 十一. 🔺映射 十二. 映射练习 十三. 函数也可当作值传递 十四. 🔺函数闭包 十五. 斐波那契数闭包练习 十六. 🔺方法 方法的定义类似于函数,但在方法名之前有一个额外的参数(接收者),它定义了这个方法可以被哪个类型的实例调用。 十七. 🔺接口 十八.

qq_49195366的博客 1567

go web db每次关闭_Go语言基础(十三)

Go语言基础(十三)一、Mysql知识点二、Go操作Mysql三、Go实现Mysql事务四、sqlx的使用五、sql注入一、MySQL知识点Mysql安装:https://www.cnblogs.com/zhangkanghui/p/9613844.html常见的数据库SQLlite、MySQL,SQLServer,Oracle,postgreSQL。MySQL主流的关系型数据库,类似的还有pos...

weixin_32009809的博客 251

Golang基础笔记十三之context

本文介绍了 Golang 中 context 包的核心功能和使用方法。context 主要用于跨 API 边界和 goroutine 间传递截止时间、取消信号和数据。主要内容包括: Context 接口定义及作用 取消传播的实现方式 超时控制的实现示例 截止时间的使用方法 通过 context 传递数据 通过具体代码示例,展示了如何使用 context.WithCancel()、context.WithTimeout()、context.WithDeadline() 和 context.WithValue(

weixin_43354181的博客 1156

【Golang 基础系列十三】Go 语言map

概述 map是基于key-value键值对的无序的集合 Go语言中的map是引用类型 必须初始化才能使用。 语法 总结 示例

郭枫的博客 335

golang从0到1实战系统二十三:method 重写

上面的例子中,如果 Emplyee 想要实现自己的 SayHi,怎么办?的道理,我们可以在 Emplyee 上面定义一个 method,重写了匿名字段的方法。通过这些内容,我们可以设计出基本的面向对象的程序了,但是 Go 里面的面向对象是如。此的简单,没有任何的私有、公有关键字,通过大小写来实现(大写开头的为共有,小写开。//Employee 的 method 重写 Human 的 method。上面的代码设计的是如此的美妙,让人不自觉的为 Go 的设计惊叹!Human //匿名字段。

Mr_Roki的博客 314
上一篇: Centos 7(一)—— Centos 7 命令行版安装(图解)
下一篇: Go语言基础(十四)—— Go语言切片,map,结构体与Json的序列化,反序列化
The_Reader
博客等级 码龄10年 74粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值