Go语言的面向对象
创始人
2025-05-28 23:38:44
0

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 mainimport ("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 mainimport "fmt"type Person struct {name stringsex  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 {// 继承PersonPerson// 学生作业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 mainimport "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 Personteacher := Teacher{"Teacher"}student := Student{"Student"}// 实现多态person = teacherperson.eating("Apple")person = studentperson.eating("Banana")}

执行obj_interface.go

# go run obj_interface.go
The Teacher eating Apple
The Student eating Banana

相关内容

热门资讯

安卓下载抖音系统要求,安卓系统... 你有没有发现,最近抖音可是越来越火了!不管是走在街头,还是坐在家里,总能看到大家刷着抖音,乐此不疲。...
华为os系统与安卓系统哪个好用... 你有没有想过,手机里的操作系统就像是我们的大脑,它决定了我们手机能做什么,不能做什么。今天,咱们就来...
安卓系统看电影看不了,为何看电... 你是不是也遇到了这样的烦恼?手机里下载了那么多好看的电影,结果一打开安卓系统,竟然发现看不了!别急,...
国产安卓系统不丝滑,探索不丝滑... 你有没有发现,用国产安卓系统的时候,有时候感觉就像是在玩儿“卡丁车”比赛,不是这里卡壳,就是那里掉链...
索尼原生安卓系统桌面,流畅体验... 亲爱的数码爱好者们,你是否曾对智能手机的操作系统产生过好奇?今天,就让我带你一探究竟,揭开索尼原生安...
安卓日常使用最好的系统,打造流... 你有没有想过,为什么你的安卓手机用起来那么顺滑,而别人的手机却总是卡得要命?这背后,其实是一个隐藏在...
大屏导航安卓系统视频,探索智能... 你有没有想过,在手机上观看视频时,如果有一个大屏导航系统,那会是怎样的体验呢?想象你正躺在沙发上,手...
安卓1.0系统怎么升级,系统升... 你那安卓手机是不是已经有点儿“老态龙钟”了?别急,今天就来给你支个招,让你的安卓1.0系统焕发青春活...
现在安卓导航系统,安卓导航系统... 你有没有发现,现在走在街上,几乎每个人手里都拿着一部手机,时不时地抬头看看导航,好像导航已经成了我们...
安卓以后不能用系统鸿蒙,安卓系... 你知道吗?最近有个大新闻在科技圈里炸开了锅!那就是安卓以后可能不能用系统鸿蒙了!是不是觉得有点懵?别...
系统最有特色的安卓手机,系统特... 你有没有想过,在这个手机如云的时代,哪款安卓手机能让你眼前一亮,仿佛它就是为你量身定做的?今天,就让...
最新的安卓电视系统版本,功能升... 亲爱的读者们,你是否也像我一样,对科技新动态充满好奇?今天,我要带你一起探索最新的安卓电视系统版本,...
蝶恋花直播app安卓系统下载,... 你有没有听说过蝶恋花直播app?这款软件最近可是火得一塌糊涂,让无数网友沉迷其中。今天,我就要带你深...
王者安卓转到苹果系统,畅享全新... 你有没有想过,从王者安卓转到苹果系统,这中间的“迁徙”过程,是不是就像一场说走就走的旅行呢?想象你手...
安卓如何改ios系统,系统转换... 你有没有想过,你的安卓手机突然间变成了一个时尚的iOS设备?是不是觉得这样的想法有点疯狂?但你知道吗...
安卓系统为什么免费wifi,技... 你有没有想过,为什么安卓系统的免费WiFi功能那么吸引人呢?这不,今天就来给你揭秘一下这个神秘的现象...
有关安卓系统的问题,常见问题与... 你有没有发现,安卓系统自从问世以来,就一直是手机界的“人气王”呢!不过,就像任何事物一样,它也有自己...
电视系统修复安卓版下载,安卓版... 你有没有遇到过电视系统突然卡壳,屏幕上满是乱码,心情瞬间跌到谷底的情况?别担心,今天就来给你支个招,...
安卓系统删除的照片恢复,找回丢... 手机里的照片不小心被删掉了,是不是瞬间感觉心都揪紧了呢?别慌,今天就来跟你聊聊安卓系统删除的照片恢复...
安卓系统文件被自动删除,揭秘自... 最近我的安卓手机出了点小状况,你猜怎么着?我的系统文件竟然被自动删除了!这可真是让我又气又无奈,于是...