返回顶部
首页 > 资讯 > 精选 >Go中怎么实现面向对象
  • 826
分享到

Go中怎么实现面向对象

2023-06-15 11:06:59 826人浏览 独家记忆
摘要

这篇文章主要为大家展示了“Go中怎么实现面向对象”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go中怎么实现面向对象”这篇文章吧。在大家初识 Go 语言时,总会拿其他语言的基本特性来类比 Go

这篇文章主要为大家展示了“Go中怎么实现面向对象”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go中怎么实现面向对象”这篇文章吧。

在大家初识 Go 语言时,总会拿其他语言的基本特性来类比 Go 语言,说白了就是老知识和新知识产生关联,实现更高的学习效率。

Go中怎么实现面向对象

最常见的类比,就是 “Go 语言如何实现面向对象?”,进一步展开就是 Go 语言如何实现面向对象特性中的继承。

这不仅在学习中才用到类比,在业内的 Go 面试中也有非常多的面试官喜欢问:

Go中怎么实现面向对象

来自读者微信

在今天这篇文章中,煎鱼带大家具体展开了解这块的知识。一起愉快地开始吸鱼之路。

什么是面向对象

在了解 Go 语言是不是面向对象(简称:OOP) 之前,我们必须先知道 OOP 是啥,得先给他 “下定义”。

根据 Wikipedia 的定义,我们梳理出 OOP 的几个基本认知:

  • 面向对象编程(OOP)是一种基于 "对象"  概念的编程范式,它可以包含数据和代码:数据以字段的形式存在(通常称为属性或属性),代码以程序的形式存在(通常称为方法)。

  • 对象自己的程序可以访问并经常修改自己的数据字段。

  • 对象经常被定义为类的一个实例。

  • 对象利用属性和方法的私有/受保护/公共可见性,对象的内部状态受到保护,不受外界影响(被封装)。

基于这几个基本认知进行一步延伸出,面向对象的三大基本特性:

  • 封装。

  • 继承。

  • 多态。

至此对面向对象的基本概念讲解结束,想更进一步了解的可自行网上冲浪。

Go 是面向对象的语言吗

“Go 语言是否一门面向对象的语言?”,这是一个日经话题。官方 FAQ 给出的答复是:

Go中怎么实现面向对象

是的,也不是。原因是:

  • Go 有类型和方法,并且允许面向对象的编程风格,但没有类型层次。

  • Go 中的 "接口  "概念提供了一种不同的方法,我们认为这种方法易于使用,而且在某些方面更加通用。还有一些方法可以将类型嵌入到其他类型中,以提供类似的东西,但不等同于子类。

  • Go 中的方法比 c++ 或 Java 中的方法更通用:它们可以为任何类型的数据定义,甚至是内置类型,如普通的、"未装箱的  "整数。它们并不局限于结构(类)。

  • Go 由于缺乏类型层次,Go 中的 "对象 "比 C++ 或 Java 等语言更轻巧。

Go 实现面向对象编程

封装

面向对象中的 “封装” 指的是可以隐藏对象的内部属性和实现细节,仅对外提供公开接口调用,这样子用户就不需要关注你内部是怎么实现的。

在 Go 语言中的属性访问权限,通过首字母大小写来控制:

  • 首字母大写,代表是公共的、可被外部访问的。

  • 首字母小写,代表是私有的,不可以被外部访问。

Go 语言的例子如下:

type Animal struct {  name string }  func NewAnimal() *Animal {  return &Animal{} }  func (p *Animal) SetName(name string) {  p.name = name }  func (p *Animal) GetName() string {  return p.name }

在上述例子中,我们声明了一个结构体 Animal,其属性 name 为小写。没法通过外部方法,在配套上存在 Setter 和 Getter  的方法,用于统一的访问和设置控制。

以此实现在 Go 语言中的基本封装。

继承

面向对象中的 “继承”  指的是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

Go中怎么实现面向对象

图来自网络

从实际的例子来看,就是动物是一个大父类,下面又能细分为 “食草动物”、“食肉动物”,这两者会包含 “动物” 这个父类的基本定义。

在 Go 语言中,是没有类似 extends 关键字的这种继承的方式,在语言设计上采取的是组合的方式:

type Animal struct {  Name string }  type Cat struct {  Animal  FeatureA string }  type Dog struct {  Animal  FeatureB string }

在上述例子中,我们声明了 Cat 和 Dog 结构体,其在内部匿名组合了 Animal 结构体。因此 Cat 和 Dog 的实例都可以调用 Animal  结构体的方法:

func main() {  p := NewAnimal()  p.SetName("煎鱼,记得点赞~")   dog := Dog{Animal: *p}  fmt.Println(dog.GetName()) }

同时 Cat 和 Dog 的实例可以拥有自己的方法:

func (dog *Dog) HelloWorld() {  fmt.Println("脑子进煎鱼了") }  func (cat *Cat) HelloWorld() {  fmt.Println("煎鱼进脑子了") }

上述例子能够正常包含调用 Animal 的相关属性和方法,也能够拥有自己的独立属性和方法,在 Go 语言中达到了类似继承的效果。

多态

面向对象中的 “多态” 指的同一个行为具有多种不同表现形式或形态的能力,具体是指一个类实例(对象)的相同方法在不同情形有不同表现形式。

多态也使得不同内部结构的对象可以共享相同的外部接口,也就是都是一套外部模板,内部实际是什么,只要符合规格就可以。

在 Go 语言中,多态是通过接口来实现的:

type AnimalSounder interface {  MakeDNA() }  func MakeSomeDNA(animalSounder AnimalSounder) {  animalSounder.MakeDNA() }

在上述例子中,我们声明了一个接口类型 AnimalSounder,配套一个 MakeSomeDNA 方法,其接受 AnimalSounder  接口类型作为入参。

因此在 Go 语言中。只要配套的 Cat 和 Dog 的实例也实现了 MakeSomeDNA 方法,那么我们就可以认为他是 AnimalSounder  接口类型:

type AnimalSounder interface {  MakeDNA() }  func MakeSomeDNA(animalSounder AnimalSounder) {  animalSounder.MakeDNA() }  func (c *Cat) MakeDNA() {  fmt.Println("煎鱼是煎鱼") }  func (c *Dog) MakeDNA() {  fmt.Println("煎鱼其实不是煎鱼") }  func main() {  MakeSomeDNA(&Cat{})  MakeSomeDNA(&Dog{}) }

当 Cat 和 Dog 的实例实现了 AnimalSounder 接口类型的约束后,就意味着满足了条件,他们在 Go 语言中就是一个东西。能够作为入参传入  MakeSomeDNA 方法中,再根据不同的实例实现多态行为。

总结

通过今天这篇文章,我们基本了解了面向对象的定义和 Go 官方对面向对象这一件事的看法,同时针对面向对象的三大特性:“封装、继承、多态” 在 Go  语言中的实现方法就进行了一一讲解。

在日常工作中,基本了解这些概念就可以了。若是面试,可以针对三大特性:“封装、继承、多态” 和 五大原则  “单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)、接口隔离原则(ISP)” 进行深入理解和说明。

在说明后针对上述提到的概念。再在 Go 语言中讲解其具体的实现和利用到的基本原理,互相结合讲解,就能得到一个不错的效果了。

以上是“Go中怎么实现面向对象”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Go中怎么实现面向对象

本文链接: https://lsjlt.com/news/280135.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go中怎么实现面向对象
    这篇文章主要为大家展示了“Go中怎么实现面向对象”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go中怎么实现面向对象”这篇文章吧。在大家初识 Go 语言时,总会拿其他语言的基本特性来类比 Go ...
    99+
    2023-06-15
  • python面向对象中类怎么实现
    这篇文章主要介绍python面向对象中类怎么实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码格式的要求没有那么严...
    99+
    2023-06-14
  • java中怎么实现面向对象编程
    这篇文章给大家介绍java中怎么实现面向对象编程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1:允许将子类的引用付给父类的对象,但子类中的那些不是从父类继承来的成员将不再可见。例:Bus bus=new&n...
    99+
    2023-06-17
  • go语言中的面向对象
    Go语言没有继承、构造函数和析构函数等概念,但是它是面向对象的。 .net中类型系统分为值类型和引用类型,两种转换需要进行装箱和拆箱,都是继承自Object类型 Go语言大多数类型都...
    99+
    2024-04-02
  • python面向对象编程怎么实现
    这篇文章主要介绍“python面向对象编程怎么实现”,在日常操作中,相信很多人在python面向对象编程怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python面向...
    99+
    2024-04-02
  • Kotlin中如何实现面向对象
    Kotlin中如何实现面向对象?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。面向对象面向对象的含义大家应该并不陌生,通过将事物抽象成对象,大大简化了程序的开发难度。我们常用的J...
    99+
    2023-05-31
    kotlin 面向对象 如何实现
  • JavaScript面向对象的支持怎么实现
    本篇内容介绍了“JavaScript面向对象的支持怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在JavaScript中,我们需要通...
    99+
    2023-06-03
  • javascript中怎么通过面向对象创建对象
    本篇文章为大家展示了javascript中怎么通过面向对象创建对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。方式一:通过内置Object对象的方式创建 然后通过...
    99+
    2024-04-02
  • Go语言的面向对象编程实践
    在 go 中,面向对象编程使用结构体和方法实现:定义一个结构体来表示自定义数据类型,包含数据字段。定义方法来操作和修改结构体实例,方法由接收器类型(即结构体)关联。使用结构体和方法管理数...
    99+
    2024-04-04
    go语言 面向对象
  • JavaScript面向对象中的封装和继承怎么实现
    这篇“JavaScript面向对象中的封装和继承怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript面...
    99+
    2023-06-29
  • Java面向对象编程的多态怎么实现
    本文小编为大家详细介绍“Java面向对象编程的多态怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java面向对象编程的多态怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Java面向对象编程之多态...
    99+
    2023-06-26
  • JavaScript面向对象怎么实现贪吃蛇游戏
    本篇内容介绍了“JavaScript面向对象怎么实现贪吃蛇游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 工具对象(Tools.js)...
    99+
    2023-06-30
  • Rust实现面向对象的方法
    目录前言1、实现封装(pub)2、实现继承(trait)2.1、为共有行为定义一个 Trait2.2、Trait 对象执行的是动态派发2.3、Trait对象必须保证对象安全3、实现多...
    99+
    2022-11-13
    Rust面向对象 Rust面向对象实现
  • go语言是面向对象的吗
    这篇文章主要介绍了go语言是面向对象的吗的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言是面向对象的吗文章都会有所收获,下面我们一起来看看吧。go语言既不是面向对象,也不是面向过程,因为Go并没有明显的倾...
    99+
    2023-07-05
  • 什么是面向对象,面向对象有哪些特征
    面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、CAD技术、人工智能等领域。面向对象特征主要有封装、抽象、继承、多态。 一、什么是面向...
    99+
    2023-10-29
    面向对象 特征 有哪些
  • Python中,什么是面向对象?
    面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象则是根据模板创建的实...
    99+
    2023-01-31
    面向对象 Python
  • 探索Go语言中的面向对象编程
    go语言支持面向对象编程,通过类型定义和方法关联实现。它不支持传统继承,而是通过组合实现。接口提供了类型间的一致性,允许定义抽象方法。实战案例展示了如何使用oop管理客户信息,包括创建、...
    99+
    2024-04-04
    go语言 面向对象
  • C++面向对象程序设计方法怎么实现
    这篇文章主要讲解了“C++面向对象程序设计方法怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++面向对象程序设计方法怎么实现”吧!C++支持数据封装支持数据封装就是支持数据抽象。在...
    99+
    2023-06-17
  • JavaScript实现烟花特效(面向对象)
    本文实例为大家分享了JavaScript实现烟花特效的具体代码,供大家参考,具体内容如下 本特效使用面向对象编程 分析 OOA 点击触发事件 烟花运动分成两个阶段 ...
    99+
    2024-04-02
  • JavaScript面向对象编程实现模拟
    目录前言1. 构造函数2. new的过程2.1 基础使用2.2 new.target3. 手动实现一个构造函数前言 每个对象都是一个功能中心,具有明确分工,可以处理信息,处理信息,发...
    99+
    2022-11-13
    JavaScript面向对象 JavaScript OOP
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作