golang如何体现面向对象思想
Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现OOP特性的。
Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现的。
Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等。
Golang仅支持聚合和嵌入,提倡面向接口编程。
Golang的封装通过struct(结构体)实现,继承通过匿名字段实现,多态通过interface(接口)实现
封装
在Java里面,我们使用public,private,protected关键字来作为变量或者函数的权限设置,但在Go语言中,GO语言只有大小写的区别,如果想把函数或者变量暴露在外部,那么就首字母大写,相反则小写。
继承(匿名字段+匿名函数)
匿名字段实现了成员变量的继承。
type Person struct { Name string Age int Gender string } type Student struct { Person //通过匿名组合方式嵌入了Person属性 Score float64 }
在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。
package main import "math" import "fmt" type Point struct { x float64 y float64 } func TraDistance(p1 Point, p2 Point) float64 { return math.Hypot(p1.x-p2.x, p1.y-p2.y) } func (p1 Point) ObjDistance(p2 Point) float64 { return math.Hypot(p1.x-p2.x, p1.y-p2.y) } func main() { p1 := Point{10, 20} p2 := Point{20, 10} old_len := TraDistance(p1, p2) new_len := p1.ObjDistance(p2) fmt.Println("The result of old method is ", old_len) fmt.Println("The result of OBJ method is ", new_len) }
多态(interface)
特点
1. interface 是⽅法声明的集合
2. 任何类型的对象实现了在interface 接⼝中声明的全部⽅法, 则表明该类型实现了该接⼝。
3. interface 可以作为⼀种数据类型, 实现了该接⼝的任何对象都可以给对应的接⼝类型变量赋值
注意
a. interface 可以被任意对象实现,⼀个类型/对象也可以实现多个 interface
b. ⽅法不能重载,如 eat(), eat(s string) 不能同时存在
interface⼀定要和多态的特性结合
多态的三要素
1 有⼀个⽗类的接⼝(抽象)
2 有⼦类重写⽗类的全部接⼝⽅ 法
3 ⽗类(接⼝类型) 指针/引⽤ 指 向⼦类对象
⼀旦有interface出现 ,⼀定要针对interface去写业 务
多态具有架构思想和调⽤未来代码的意义
⾯向对象的开闭原则
给⼀个类添加⼀个新的功能,不需要修改该类,⽽是通过额外的 添加代码来实现,保证了之前原有系统的安全性
⾯向对象的依赖倒转原则
抽象层
先设计抽象层接⼝,实现⼀个⼀个的interface
设计难度较⼤,不要轻易修改
实现层
⾯向抽象层 是实现具体的类,将接⼝全部实现
业务逻辑层
⾯向抽象层,去编织业务逻辑
总结:接⼝的意义 多态的思想 调⽤未来
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2019-09-21 看准未来之紧盯国内互联网巨头动向