我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Golang 语言是面向对象编程风格的编程语言吗?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Golang 语言是面向对象编程风格的编程语言吗?

虽然 Golang 语言有类(struct)和方法(method),支持面向对象的编程风格,我们可以使用 Golang 语言的 struct 实现面向对象的封装特性,但是 Golang 语言没有面向对象的继承特性,Golang 语言可以使用组合实现“继承”。

Golang 语言中的 interface 也和其他语言中的接口实现方式不同,Golang 语言中的接口实现方式是鸭子类型(duck type)。

封装,继承和多态是区分编程语言是否是面向对象编程语言的三个重要特性。本文我们通过一些简单易懂的示例代码介绍一下 Golang 语言的面向对象编程风格。

02封装

面向对象的封装特性,其他面向对象语言是使用 class 定义一个类,然后在类中定义属性和方法。在 Golang 语言中,没有类 class 的概念,它是使用结构体 struct 替代类 class,struct 中可以包含零个或多个变量,然后可以使用 method 和 struct 绑定实现方法,用来替代其他语言中 class 中的属性和方法。

关于 method 绑定的 struct(接收者)是值类型和指针类型之间的区别,我们在之前的文章中介绍过,在此不再赘述。

  1. type Employee struct { 
  2.  Name string 
  3.  Gender string 
  4.  Age uint8 
  5.  Salary uint 
  6.  
  7. func (e Employee) Information () string { 
  8.  return fmt.Sprintf("Name:%s Gender:%s Age:%d Salary:%d", e.Name, e.Gender, e.Age, e.Salary) 

阅读上面这段代码,我们定义了一个命名是 Employee 的 struct,包含 4 个成员变量,并且定义一个 Information 方法,绑定到命名是 Employee 的 struct 上。

03继承 组合

面向对象的继承特性,在 Golang 语言中并不支持,但是可以使用组合的方式实现“继承”。

  1. type User struct { 
  2.  ID uint64 
  3.  Name string 
  4.  Score uint64 
  5.  
  6. type Member struct { 
  7.  User 
  8.  Level uint8 
  9.  
  10. func (u User) Information () string { 
  11.  return fmt.Sprintf("ID:%d Name:%s Score:%d", u.ID, u.Name, u.Score) 

阅读上面这段代码,我们定义了一个命名为 User 的 struct,它包含 3 个成员变量,然后定一个一个命名为 Member 的 struct,它包含 2 个成员变量,其中一个成员变量是嵌入的 User,通过组合的方式,类型 Member 就“继承”了类型 User 的属性(成员变量)和方法。

04多态

Golang 语言中也有接口 interface,它的 interface 的实现方式是 duck type,它不需要像其他面向对象编程语言那样,使用关键字 implements 显式声明,而是只需要类型通过实现接口中的所有方法来实现接口。

  1. type MemberRights interface { 
  2.  Information () string 
  3.  
  4. type BronzeMember struct { 
  5.  Discount uint8 
  6.  
  7. type SilverMember struct { 
  8.  Discount uint8 
  9.  
  10. type GoldMember struct { 
  11.  Discount uint8 
  12.  
  13. func (b *BronzeMember) Information () string { 
  14.  return fmt.Sprintf("Discount:%d", b.Discount) 
  15.  
  16. func (s *SilverMember) Information () string { 
  17.  return fmt.Sprintf("Discount:%d", s.Discount) 
  18.  
  19. func (g *GoldMember) Information () string { 
  20.  return fmt.Sprintf("Discount:%d", g.Discount) 
  21.  
  22. func Price (m MemberRights) { 
  23.  fmt.Println(m.Information()) 
  24.  
  25. func main () { 
  26.  b := &BronzeMember{Discount: 9} 
  27.  Price(b) 
  28.  s := &SilverMember{8} 
  29.  Price(s) 
  30.  g := new(GoldMember) 
  31.  g.Discount = 7 
  32.  Price(g) 

阅读上面这段代码,我们定义一个命名为 MemberRights 的接口,包含一个方法 Information () string,然后定义了三个 struct,命名分别是 BronzeMember,SilverMember 和 GoldMember,并且实现了 Information () string 方法。

我们还定义了一个函数 Price,接收一个 MemberRights 接口类型的参数。我们在 main 函数中调用 Price 函数,并分别传入我们定义的三个实现了 MemberRights 接口包含的方法 Information () string 的变量作为 Price 函数的参数。因为 Price 函数的参数是接口类型,所以我们需要传入指针类型的变量,我们还特意通过三种不同的方式声明指针类型的变量。

05总结

本文我们介绍了 Golang 语言是否是面向对象编程风格的语言,并给出了 Golang 语言官方的回答和解释。然后使用示例代码介绍了 Golang 语言的面向对象编程风格。

 

需要注意的是 Golang 语言中使用命名首字母大小写区分私有和公有,私有和公有属性在 Golang 语言中也叫可导出和非可导出。

本文转载自微信公众号「Golang语言开发栈」,可以通过以下二维码关注。转载本文请联系Golang语言开发栈公众号。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Golang 语言是面向对象编程风格的编程语言吗?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Golang 语言是面向对象编程风格的编程语言吗?

本文我们介绍了 Golang 语言是否是面向对象编程风格的语言,并给出了 Golang 语言官方的回答和解释。然后使用示例代码介绍了 Golang 语言的面向对象编程风格。

Go 语言:面向对象还是非面向对象?揭开编程语言的本质

Go 语言虽然不是典型的面向对象语言,但它通过结构体、接口和组合等机制,实现了面向对象编程的核心概念。这种独特的设计使得 Go 语言在保持简洁性的同时,也能够满足面向对象编程的需求。
Go语言接口2024-11-29

Go语言的面向对象编程实践

在 go 中,面向对象编程使用结构体和方法实现:定义一个结构体来表示自定义数据类型,包含数据字段。定义方法来操作和修改结构体实例,方法由接收器类型(即结构体)关联。使用结构体和方法管理数据,如创建实例、访问信息和修改数据。Go 语言的面向对
Go语言的面向对象编程实践
2024-04-04

Go语言中的面向对象编程(OOP)

数据抽象是一种设计模式,其中数据仅对语义相关的函数可见,以防止误用。数据抽象的成功导致在面向对象和纯函数式编程中频繁地将数据隐藏作为设计原则。

如何学会面向对象编程语言

这期内容当中小编将会给大家带来有关如何学会面向对象编程语言,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。面向对象编程语言的基础理论要点:学习基础理论要点,例如设计模式/范式,这样你就知道了在所有面向对象的
2023-06-17

探索Go语言中的面向对象编程

go语言支持面向对象编程,通过类型定义和方法关联实现。它不支持传统继承,而是通过组合实现。接口提供了类型间的一致性,允许定义抽象方法。实战案例展示了如何使用oop管理客户信息,包括创建、获取、更新和删除客户操作。Go语言中的面向对象编程G
探索Go语言中的面向对象编程
2024-04-04

C语言面向对象编程中的封装是什么

这篇文章主要介绍“C语言面向对象编程中的封装是什么”,在日常操作中,相信很多人在C语言面向对象编程中的封装是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言面向对象编程中的封装是什么”的疑惑有所帮助!
2023-06-29

熟练掌握 Go 语言的面向对象编程

一分耕耘,一分收获!既然都打开这篇《熟练掌握 Go 语言的面向对象编程》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容
熟练掌握 Go 语言的面向对象编程
2024-04-04

java语言是一种面向对象的程序设计语言吗

java语言是一种面向对象的程序设计语言吗java语言是面向对象的程序设计语言。(相关视频教程分享:java视频教程)支持部分或绝大部分面向对象特性(类和实例、封装性、继承、多态)的语言即可称为基于对象的或面向对象的语言。Java跟C#是目前最流行的两门面向对
java语言是一种面向对象的程序设计语言吗
2021-09-12

go语言是编程语言吗

go语言是编程语言。go语言又称Golang,是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go语言的推出,旨在不损失应用程序性能的情况下降低代码的复杂性,具有“部署简单、并发性好、语言设计良好、执行性能好”等优势。
2022-11-28

go语言是面向对象的吗

这篇文章主要介绍了go语言是面向对象的吗的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言是面向对象的吗文章都会有所收获,下面我们一起来看看吧。go语言既不是面向对象,也不是面向过程,因为Go并没有明显的倾
2023-07-05

PHP面向对象编程:与其他语言的比较

php 面向对象编程是一种强大的方式来组织代码,它支持类、对象、继承和接口。与 java 相比,php 是一种弱类型语言,对象通过值传递。与 c++++ 相比,php 是一个动态类型语言,具有较少的特性。php 中的 oop 可用于创建银行
PHP面向对象编程:与其他语言的比较
2024-05-11

html是编程语言吗

HTML是一种标记语言,用于创建网页。虽然HTML经常被视为一种编程语言,但事实上,它并不是编程语言,而是一种标记语言。HTML代表超文本标记语言,是一种使用标准标记(标记)来注释和描述网页元素的语言,例如页面标题、表格、段落和链接。HTML不是代码,但它确实由代码构成。HTML中的代码称为标记。标记是包含在尖括号中的文本,例如`<html>`和`<p>`。标记告诉浏览器如何处
2023-05-14

oracle是编程语言吗

oracle 并非编程语言,而是一个数据库管理系统 (dbms),用于存储和管理数据。虽然 oracle 提供自定义功能,但它缺乏编程语言的关键特征,如变量声明、控制流和循环。它提供 pl/sql 等工具,用于在 oracle 数据库上创建
oracle是编程语言吗
2024-04-19

使用C语言怎么实现面向对象编程OOP

本篇文章为大家展示了使用C语言怎么实现面向对象编程OOP,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。过程&对象?一个对象就是由或多或少的针对这个对象的过程构成的,当然其中是少不了必要的属性。一个过
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录