iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >go语言中的面向对象
  • 426
分享到

go语言中的面向对象

2024-04-02 19:04:59 426人浏览 安东尼
摘要

Go语言没有继承、构造函数和析构函数等概念,但是它是面向对象的。 .net中类型系统分为值类型和引用类型,两种转换需要进行装箱和拆箱,都是继承自Object类型 Go语言大多数类型都

Go语言没有继承、构造函数和析构函数等概念,但是它是面向对象的。

.net中类型系统分为值类型和引用类型,两种转换需要进行装箱和拆箱,都是继承自Object类型

Go语言大多数类型都是值类型,需要的话可以给任何类型增加功能

1.为类型添加方法

c++等语言的面向对象都相当于C语言的一个语法糖

下面看看Go语言如何实现面向对象的

可以看出,面向对象只是换了一种语法形式来表达。C++语言的面向对象之所以让有些人迷惑的

一大原因就在于其隐藏的this指针。而Java和C#其实都是遵循着C++语言的惯例而设计的,它们的成员方法中都带有一个隐藏的this指针。如果读者了解python语法,就会知道Python的成员方法中会有一个self参数,它和this指针的作用是完全一样的。

“在Go语言中没有隐藏的this指针”这句话的含义是:

  • 方法施加的目标(也就是“对象”)显式传递,没有被隐藏起来;
  • 方法施加的目标(也就是“对象”)不需要非得是指针,也不用非得叫this。

我的理解:像C#这样的语言,在使用面向对象的方式时候,其中this是隐藏起来的,所以在内部使用this就代表了对象自己,但是Go语言中不去隐藏这个this,是显示写出来的,如下面的(a Integer),既然显示表示了,那么叫什么也就无所谓了。

type Integer int
func (a Integer) Less(b Integer) bool {
     return a < b
}

不必传指针的原因在于,不是所有的方法都是需要修改对象,对于很小的对象(比如4字节),如果传指针会有额外的成本。

2.值语义和引用语义

b = a

b.Modify()

如果b的修改不会影响a的值,那么此类型属于值类型。如果会影响a的值,那么此类型是引用类型。

Go语言中的大多数类型都基于值语义,包括:

  • 基本类型,如byte、int、bool、float32、float64和string等;
  • 复合类型,如数组(array)、结构体(struct)和指针(pointer)等。

这里书上特意强调了数组(array),他是值类型的,对比了C语言的数组,C语言的数组可能会表现为多个形态,当作为函数的参数传递的时候是引用类型,当作为结构体的变量又是值类型(表现为赋值时候是复制了一份)

以下是引用语义

  • 数组切片:指向数组(array)的一个区间。
  • map:极其常见的数据结构,提供键值查询能力。
  • channel:执行体(goroutine)间的通信设施。
  • 接口(interface):对一组满足某个契约的类型的抽象。

到此这篇关于Go语言面向对象的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

您可能感兴趣的文档:

--结束END--

本文标题: go语言中的面向对象

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • go语言中的面向对象
    Go语言没有继承、构造函数和析构函数等概念,但是它是面向对象的。 .net中类型系统分为值类型和引用类型,两种转换需要进行装箱和拆箱,都是继承自Object类型 Go语言大多数类型都...
    99+
    2024-04-02
  • go语言是面向对象的吗
    这篇文章主要介绍了go语言是面向对象的吗的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言是面向对象的吗文章都会有所收获,下面我们一起来看看吧。go语言既不是面向对象,也不是面向过程,因为Go并没有明显的倾...
    99+
    2023-07-05
  • go语言是不是面向对象的
    小编给大家分享一下go语言是不是面向对象的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!go语言即不是面向对象,也不是面向过程,因为Golang并没有明显的倾向,而是更倾向于让编程者去考虑该怎么去用它,也许它的特色就是灵活...
    99+
    2023-06-14
  • 探索Go语言中的面向对象编程
    go语言支持面向对象编程,通过类型定义和方法关联实现。它不支持传统继承,而是通过组合实现。接口提供了类型间的一致性,允许定义抽象方法。实战案例展示了如何使用oop管理客户信息,包括创建、...
    99+
    2024-04-04
    go语言 面向对象
  • Go语言的面向对象编程实践
    在 go 中,面向对象编程使用结构体和方法实现:定义一个结构体来表示自定义数据类型,包含数据字段。定义方法来操作和修改结构体实例,方法由接收器类型(即结构体)关联。使用结构体和方法管理数...
    99+
    2024-04-04
    go语言 面向对象
  • Go语言中面向对象的优势与不足
    go语言中的面向对象优势包括代码重用、封装、继承和多态性。不足之处有显式接口、缺少运算符重载、方法接收者和没有结构体嵌入。实战案例中,面向对象原则被用于构建汽车租赁系统,其中car和re...
    99+
    2024-04-04
    go语言 面向对象
  • Go语言的面向对象特性解析
    go 语言支持面向对象编程,通过 struct 定义对象,使用指针接收器定义方法,并通过接口实现多态。面向对象特性在 go 语言中提供了代码重用、可维护性和封装,但也存在缺乏传统类和继承...
    99+
    2024-04-04
    golang 面向对象 go语言
  • 面向对象编程在R语言与Go语言中的应用对比
    标题:面向对象编程在R语言与Go语言中的应用对比 随着计算机科学的不断发展,面向对象编程(Object-oriented programming)已经成为现代编程语言中广泛应用的一种编...
    99+
    2024-04-02
  • 深入理解Go语言的面向对象模型
    go 语言通过对象、类型和接口提供面向对象编程(oop)支持。对象是匿名类型,类型是隐式类,接口定义对象行为,而继承则通过类型嵌入实现。实战案例:使用 oop 创建一个学生管理系统,其中...
    99+
    2024-04-04
    go语言 面向对象
  • 熟练掌握 Go 语言的面向对象编程
    一分耕耘,一分收获!既然都打开这篇《熟练掌握 Go 语言的面向对象编程》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在...
    99+
    2024-04-04
  • javascript是面向对象语言吗
    本篇内容主要讲解“javascript是面向对象语言吗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript是面向对象语言吗”吧! ...
    99+
    2024-04-02
  • Python面向对象语言的概念
    这篇文章主要讲解了“Python面向对象语言的概念”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python面向对象语言的概念”吧!在我们的程序中,我们都是根据操作数据的函数或语句块来设计程...
    99+
    2023-06-17
  • GO语言结构体面向对象操作示例
    目录匿名字段初始化成员的操作同名字段非结构体匿名字段结构体指针类型匿名字段面向过程和对象函数的区别为结构体类型添加方法指针变量方法集普通变量方法集方法的继承方法的重写方法值方法表达式...
    99+
    2024-04-02
  • Go语言控制反转:面向对象编程的灵活性
    go语言中的控制反转为面向对象编程提供了灵活性,通过分离对象创建和依赖注入实现:ioc 基本原理:外部容器或框架管理对象创建和注入,对象不再直接实例化其他对象。依赖注入:依赖项作为参数传...
    99+
    2024-04-08
    面向对象 控制反转 go语言
  • 用C语言怎么写面向的对象
    这篇文章主要讲解了“用C语言怎么写面向的对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用C语言怎么写面向的对象”吧!以下我将用一个工厂类实现具体汽车的生产,奔驰车、宝马车、奥迪车都将通过...
    99+
    2023-06-17
  • Python语言的面向对象举例分析
    本篇内容介绍了“Python语言的面向对象举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先,我们需要定义一个新的HTMLParse...
    99+
    2023-06-17
  • C++在非面向对象方面对C语言的扩充
    目录C++在非面向对象方面对C语言的扩充引入命名空间函数重载默认参数常量表达式总结C++在非面向对象方面对C语言的扩充 C++是一种面向对象编程语言,但它也可以作为C语言的扩展语言。...
    99+
    2023-05-19
    C++非面向对象扩充 非面向对象对C语言扩充 C语言扩充
  • 详解C语言面向对象编程中的封装
    目录前言一、面向对象基本概念什么是对象?对象与类面向对象的编程方式二、C语言实现面向对象面向对象的三大特征面向对象之封装简介代码实现–基础版代码实现-进阶版总结前言 面向...
    99+
    2024-04-02
  • Go中怎么实现面向对象
    这篇文章主要为大家展示了“Go中怎么实现面向对象”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go中怎么实现面向对象”这篇文章吧。在大家初识 Go 语言时,总会拿其他语言的基本特性来类比 Go ...
    99+
    2023-06-15
  • 如何在Go语言中实现NumPy对象的重定向?
    在数据科学和机器学习领域中,NumPy是一种经常被使用的Python库。它提供了许多用于数学计算的快速和高效的数组操作。然而,在某些情况下,我们可能需要将NumPy数组与其他编程语言或库进行集成,这时候Go语言就是一个很好的选择。本文将介绍...
    99+
    2023-09-04
    numy 重定向 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作