go语言中的面向对象
作者:奋斗的大橙子 发布时间:2024-01-31 17:04:13
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):对一组满足某个契约的类型的抽象。
来源:https://www.cnblogs.com/dcz2015/p/10096464.html


猜你喜欢
- Python3异步asyncio问题官方文档:https://docs.python.org/zh-cn/3/library/asyncio
- 说起 Python 强大的地方,你可能想到是它的优雅、简洁、开发速度快,社区活跃度高。但真正使得这门语言经久不衰的一个重要原因是它的无所不能
- function create5StarClip(context) { var n = 0; var dx = 100; var dy =
- 又遇到了一个坑。。类似于安装py2neo时遇到的问题差不多...今天准备试一下docx,按照网上的步骤直接在命令行中pip install
- crtrl.py监控Apache服务器进程的Python 脚本!/usr/bin/env Python import os, sys, ti
- 本文实例为大家分享了Python实现图片格式转换的具体代码,供大家参考,具体内容如下碰上这样一个情景:我从网络上下载了一张表情包图片,存放在
- 数组去重复和数组排序'数组名次 Function Sort(ary,stra) KeepChecking =&n
- JWT介绍Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.该token被设计为
- 解决MySQL插入时间差八小时问题一般 jdbc url中 需要添加几个参数 , 大多数博客给的教程都是 useSSL=false&
- 因为m1芯片是arm版本的架构,以前在mac上的很多软件都是基于Intel架构的软件,apple开发了rossta2,可以在m1上运行int
- 概述备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的
- 说起交叉熵损失函数「Cross Entropy Loss」,脑海中立马浮现出它的公式:我们已经对这个交叉熵函数非常熟悉,大多数情况下都是直接
- 本文章采用的是Qt4,是python(x,y) 套件中集成的,为啥不集成Qt5呢,懒得装啊:)正文:首先看成品:这个程序的功能是输入原价和降
- Mysql事务操作失败如何解决事务的原子性 :事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 。要实现事务的原子性,单单
- 下载:pip install apschedulerpip install django-apscheduler将 django-apsch
- 熟悉css的开发者一定知道图像替换技术,也深知它的意义,Dave Shea 曾在他的一篇文章对此做了详细的总结,参看 Dave Shea’s
- SQL Server日期计算 通常,你需要获得当前日期和计算一些其他的
- 和数据库打交道要频繁地用到SQL语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点。因此,大多数
- 为了能够在Visual Studio 中集成Mysql, 首先需要安装MySql的连接工具 与 MySql的VisualStudio插件。M
- 一、配置抓包工具1.安装软件本文选择的抓包工具:Fiddler 具体的下载安装这里不详细赘述!(网上搜Fiddler安