当前位置: 首页 > news >正文

golang学习笔记28——golang中实现多态与面向对象

  • 推荐学习文档
    • golang应用级os框架,欢迎star
    • golang应用级os框架使用案例,欢迎star
    • 案例:基于golang开发的一款超有个性的旅游计划app经历
    • golang实战大纲
    • golang优秀开发常用开源库汇总
    • 想学习更多golang知识,这里有免费的golang学习笔记专栏

文章目录

    • 前言
    • Go 语言中的接口实现多态
      • 1.定义接口
      • 2.实现接口的结构体
      • 3.多态的体现
    • Go 语言中的面向对象特性
      • 1.封装
      • 2.组合代替继承
    • 总结

前言

Go 语言并不是传统意义上的面向对象编程语言,但它通过一些独特的方式实现了类似面向对象编程(OOP)的特性,其中包括多态的实现。本文将详细介绍在 Go 语言中如何实现多态以及面向对象相关概念。

Go 语言中的接口实现多态

在 Go 语言中,接口是实现多态的关键。接口定义了一组方法,但不实现这些方法。任何类型只要实现了接口中定义的所有方法,就被认为实现了该接口。

1.定义接口

以下是一个简单的接口定义:

type Shape interface {Area() float64Perimeter() float64
}

2.实现接口的结构体

我们定义两个结构体 Rectangle 和 Circle 并让它们实现 Shape 接口:

type Rectangle struct {width  float64height float64
}func (r Rectangle) Area() float64 {return r.width * r.height
}func (r Rectangle) Perimeter() float64 {return 2*(r.width + r.height)
}type Circle struct {radius float64
}func (c Circle) Area() float64 {return 3.14 * c.radius * c.radius
}func (c Circle) Perimeter() float64 {return 2 * 3.14 * c.radius
}

3.多态的体现

通过接口类型的变量,我们可以调用不同实现类型的方法,这体现了多态性:

func main() {var s Shaper := Rectangle{width: 5, height: 3}s = rfmt.Println("Rectangle Area:", s.Area())fmt.Println("Rectangle Perimeter:", s.Perimeter())c := Circle{radius: 4}s = cfmt.Println("Circle Area:", s.Area())fmt.Println("Circle Perimeter:", s.Perimeter())
}

Go 语言中的面向对象特性

1.封装

在 Go 语言中,通过将结构体的字段小写(在 Go 中,小写字母开头的标识符在包外不可见)来实现封装,这样可以控制对内部数据的访问。例如:

package mainimport "fmt"type Person struct {name stringage  int
}func NewPerson(name string, age int) *Person {return &Person{name: name, age: age}
}func (p *Person) GetName() string {return p.name
}func (p *Person) SetName(newName string) {p.name = newName
}func main() {p := NewPerson("Alice", 30)fmt.Println(p.GetName())p.SetName("Bob")fmt.Println(p.GetName())
}

2.组合代替继承

Go 语言没有继承的概念,而是通过组合来实现代码复用。例如:

type Animal struct {Name string
}func (a *Animal) Move() {fmt.Printf("%s is moving\n", a.Name)
}type Dog struct {AnimalBreed string
}func main() {dog := Dog{Animal{"Doubao"}, "Poodle"}dog.Move()
}

总结

虽然 Go 语言不是纯粹的面向对象语言,但它通过接口、封装和组合等特性,提供了一种灵活且高效的编程方式来实现多态和面向对象相关的编程模式。这些特性使得 Go 语言在复杂系统的构建中能够满足各种设计需求,同时保持了语言的简洁性和高效性。

希望这篇文章能够帮助大家更好地理解 Go 语言在多态和面向对象方面的实现方式。如果有任何疑问或者建议,请随时在评论区留言。

关注我看更多有意思的文章哦!👉👉

http://www.lryc.cn/news/443665.html

相关文章:

  • 运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。
  • k8s自动清理pod脚本分享
  • Go并发编程的高级技巧——请求复制与限流
  • 网站建设模板选择哪种
  • 【linux】kill命令
  • Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook
  • 1.Spring-容器-注册
  • Mapper.xml SQL大于小于号转义符
  • Linux:进程(三)——进程状态
  • Effective Java 学习笔记 如何为方法编写文档
  • TCP四大拥塞控制算法总结
  • 深入解析ElasticSearch从基础概念到性能优化指南
  • git分支合并时忽略指定文件
  • 基于微信小程序的童装商城的设计与实现+ssm(lw+演示+源码+运行)
  • 什么叫后验分布
  • Godot游戏如何提升触感体验
  • 数字图像面积计算一般方法及MATLAB实现
  • 【STL】 set 与 multiset:基础、操作与应用
  • xhs 小红书 x-s web 分析
  • 胤娲科技:谷歌DeepMind祭出蛋白质设计新AI——癌症治疗迎来曙光
  • 【后端】【nginx】nginx常用命令
  • MATLAB系列08:输入/输入函数
  • 《财富之眼:用经济思维看清世界》pdf电子书下载
  • QT中文乱码
  • 如何安装1Panel面板并架设一个静态网站
  • craco-less使用问题
  • 14 vue3之内置组件trastion全系列
  • 力扣(leetcode)每日一题 LCR 187 破冰游戏(还是考的约瑟夫环)
  • nginx模块篇(四)
  • 奇安信渗透2面经验分享