自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 十大经典排序算法之Go语言实现

算法分类十大排序算法可分为两大类:比较排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。算法分析排序算法时间复杂度(平均)时间复杂度(最好)时间复杂度(最坏)空间复杂度排序方式稳定性冒泡排序O(n2)O(n)O(n2)O(1)In-place稳定选择排序O

2021-12-31 20:00:01 360

原创 Docker 网络配置

理解 Docker0先查看本地 ip[root@iZwz98zi7ua638a1dxozhyZ ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo

2021-10-31 15:41:09 164

原创 DockerFile 文件详解

什么是 DockerFileDockerFile 是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本。构建步骤:编写 DockerFile 文件docker build 构建镜像docker runDockerFile 构建过程基础知识:1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数2、指令按照从上到下,顺序执行3、# 表示注释4、每条指令都会创建一个新的镜像层,并对镜像进行提交流程:1、docker从基础镜像运行一个容器2、执行一条指令并对

2021-10-30 23:50:09 711

原创 Docker 容器数据卷

数据卷特点数据卷可在容器之间共享或重用数据卷中的更改可以直接生效数据卷中的更改不会包含在镜像的更新中数据卷的生命周期一直持续到没有容器使用它为止总结: 就是容器的持久化,以及容器间的继承和数据共享!使用数据卷容器中直接使用命令来添加# 挂载命令 docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名 # 测试[root@iZwz98zi7ua638a1dxozhyZ ~]# docker run -it -v /home/ceshi:/home centos

2021-10-29 22:34:10 92

原创 Docker 镜像加载原理

镜像是什么镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。镜像加载原理UnionFS(联合文件系统)Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。

2021-10-28 23:04:21 219

原创 Docker 安装及常用命令

环境说明# 查看系统内核[root@iZwz98zi7ua638a1dxozhyZ ~]# uname -r3.10.0-957.21.3.el7.x86_64# 查看版本系统[root@iZwz98zi7ua638a1dxozhyZ ~]# cat /etc/os-release NAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID="7"PRETTY_NAME="CentOS

2021-10-27 23:56:30 109

原创 Linux进程管理及常用操作

进程的基本介绍在 LINUX 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号。每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器。每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。显示系统执行的进程说明查看进行使用的指令是 ps,一般来说

2021-09-25 21:13:09 697

原创 《操作系统》:05输入输出(IO)管理

I/O 设备的基本概念与分类什么是 I/O 设备将数据 Input/Output(输入/输出)计算机的外部设备按使用特性分类人机交互类外部设备存储设备网络通信设备按传输速率分类低速设备中速设备高速设备按信息交换的单位分类块设备(传输快,可寻址)字符设备(传输慢,不可寻址,常采用中断驱动方式)I/O 控制器主要功能接受和识别 CPU 发出的命令(要有控制寄存器)向 CPU 报告设备的状态(要有状态寄存器)数据交换(要有数据寄存器,暂存输入/输出的数据)地址识

2021-09-05 23:50:09 403

原创 《操作系统》:04文件管理

初始文件管理文件的定义:一组有意义的信息的集合文件的属性:文件名标识符、类型、位置、大小、保护信息…文件内部应该如何被组织起来(文件的逻辑结构)文件之间应该如何被组织起来(目录结构)操作系统应向上提供哪些功能(create、delete、open、close、read、write 系统调用)文件应如何存放在外存中(文件的物理结构)操作系统如何管理外存中的空闲块(存储空间的管理)操作系统需要提供的其他文件管理功能文件共享文件保护文件的逻辑结构无结构文件由二进制流或字符流组成

2021-09-05 23:49:09 186

原创 《操作系统》:03内存管理

内存的基础知识什么是内存,有何作用存储单元、内存地址的概念和联系按字节编址 vs 按字编址进程运行的基本原理指令的工作原理:操作码+若干参数(可能包含地址参数)逻辑地址(相对地址)vs 物理地址(绝对地址)从写程序到程序运行编辑源代码文件编译:由源代码文件生成目标模块(高级语言 "翻译” 为机器语宫)链接:由目标模块生成装入模块,链接后形成完整的逻辑地址装入:将装入模块装入内存,装入后形成物理地址三种链接方式静态链接:装入前链接成一个完整装入模块装入时动态链接:运行前边

2021-09-05 23:48:17 672

原创 《操作系统》:02进程管理

进程的定义进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位进程的组成PCB进程描述信息进程标识符 PID(当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的ID,用于区分不同的进程,类似于身份证号)用户标识符 UID进程控制和管理信息进程当前状态进程优先级资源分配清单程序段指针数据段指针键盘鼠标处理机相关信息各种寄存器值(当进程切换时需要把进程当的的运行情况记录下来保存在 PCB 中,如程序计数器的值表示了当前程序执行到哪一句)

2021-09-05 23:46:46 192

原创 《操作系统》:01计算机系统概述

操作系统的概念、功能概念(定义)负责管理协调硬件、软件等计算机资源的工作为上层用户、应用程序提供简单易用的服务是一种系统软件目标和功能资源的管理者处理机管理存储器管理文件管理设备管理向用户提供服务命令接口(联机命令接口、脱机命令接口)程序接口(由一组系统调用组成)GUI 用户图形界面对硬件机器的扩展扩充机器操作系统的特征操作系统是一种系统软件,但与其他系统软件和应用软件有很大的不同,它有自己的特殊性即基本特征。操作系统的基本特征包括并发、共享、虚拟和异步。

2021-09-01 22:55:46 185

原创 《数据结构》:07查找

查找的基本概念**查找:**在数据集合中寻找满⾜某种条件的数据元素的过程称为查找 。查找结果只有两种:成功/失败。**查找表(查找结构):**用于查找的数据集合称为查找表,它由同⼀类型的数据元素(或记录)组成,可以是一个数组或链表等数据类型。查找表的常见操作:①查找符合体条件的数据元素,②插入、删除某个数据元素。**静态查找表:**若一个查找表的操作不涉及到插入、删除操作,则无须动态地修改查找表。此类查找表称为静态查找表,反之为动态查找表**关键字:**数据元素中唯⼀标识该元素的某个数据项的值,使⽤

2021-08-30 22:56:08 123

原创 《数据结构》:06图

图的定义图G由顶点集V和边集E组成,记为 G = (V, E),其中 V(G) 表示图G中顶点的有限非空集;E(G) 表示图G中顶点之间的关系(边)集合。若 V = {v1, v2, … , vn},则用|V|表示图G中顶点的个数,也称图G的阶,E = {(u, v) | u∈V, v∈V},用|E|表示图G中边的条数。注意:线性表可以是空表,树可以是空树,但图不可以是空,即V一定是非空集。无向图若 E 是无向边(简称边)的有限集合时,则图G为无向图。边是顶点的无序对,记为 (v, w) 或 (

2021-08-29 22:01:59 277

原创 《数据结构》:05树与二叉树

树的概念树是 n(n≥0)个结点的有限集合,n = 0 时,称为空树,这是一种特殊情况。在任意一棵非空树中应满足:有且仅有一个特定的称为根的结点。当 n > 1时,其余结点可分为 m(m > 0)个互不相交的有限集合 T1, T2,…, Tm,其中每个集合本身又是一棵树,并且称为根结点的子树。**空树:**结点数为 0 的树非空树的特性:有且仅有一个根节点没有后继的结点称为 “叶子结点”(或终端结点)有后继的结点称为 “分支结点”(或非终端结点)除了根节点外,任何一个结

2021-08-28 22:53:17 275

原创 《数据结构》:04串

串的定义串,即字符串(String)是由零个或多个字符组成的有限序列。一般记为 S = 'a1a2······an'(n ≥0)其中,S 是串名,单引号括起来的字符序列是串的值;ai 可以是字母、数字或其他字符;串中字符的个数 n 称为串的长度。n = 0 时的串称为空串(用∅表示)。例:S="HelloWorld!" T='iPhone 11 Pro Max?'**子串:**串中任意个连续的字符组成的子序列。 Eg:’iPhone’,’Pro M’ 是串 T 的子串**主串:**包含子串的串。

2021-08-27 23:22:17 144 1

原创 《数据结构》:03栈和队列

栈的基本概念栈(Stack)是只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作,如图所示:**栈顶(Top):**线性表允许进行插入删除的那一端。**栈底(Bottom):**固定的,不允许进行插入和删除的另一端。**空栈:**不含任何元素的空表。栈的基本操作方法描述InitStack(&S)初始化一个空栈SStackEmpty(S)判断一个栈是否为空,若栈S为空则返回true,否则返回false

2021-08-26 22:44:16 215

原创 《数据结构》:02线性表

线性表的概述线性表是具有相同数据类型的 n(n≥0)个数据元素的有限序列,其中 n 为表长,当 n = 0 时线性表是一个空表。若用 L 命名线性表,则其一般表示为L = (a1, a2, … , ai, ai+1, … , an)ai 是线性表中的 “第i个” 元素线性表中的位序。a1 是表头元素;an是表尾元素。除第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外,每个元素有且仅有一个直接后继。线性表的特点表中元素的个数有限。表中元素具有逻辑上的顺序性,

2021-08-25 21:57:22 431

原创 《数据结构》:01绪论

基本概念和术语数据数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。数据元素数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。数据对象数据对象是具有相同性质的数据元素的集合,是数据的一个子集。数据类型数据类型是一个值的集合和定义在此集合上的一组操作的总称。**原子类型:**其值不可再分的数据类型。**结构类型:**

2021-08-24 23:22:46 124

原创 Redis缓存穿透、击穿和雪崩

Redis 缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。另外的一些典型问题就是,缓存穿透、缓存击穿和缓存雪崩。目前,业界也都有比较流行的解决方案。缓存穿透问题描述key 对应的数据在数据源并不存在,每次针对此 key 的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户 id 获取用户信息,不论缓存还

2021-08-23 23:25:31 109

原创 Redis主从复制和集群搭建

Redis 主从复制主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master 以写为主,Slave 以读为主。默认情况下,每台 Redis 服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。主从复制的作用**数据冗余:**主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

2021-08-22 22:12:58 149

原创 Redis持久化的实现

Redis 的持久化Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。Redis 提供了2个不同形式的持久化方式:RDB(Redis DataBase)AOF(Append Of File)RDB(Redis DataBase)在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的 Snapshot 快照,它恢复时是将快照文件直接读到内存里。Redis 会单独创建(fork)一个子进程来进行持久化,会先将数据写入

2021-08-21 22:40:22 110

原创 Redis事务、锁机制

Redis 事务定义Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis 事务的主要作用就是串联多个命令防止别的命令插队。Redis 事务特性**单独的隔离操作:**事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。**没有隔离级别的概念:**队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行。**不保证原子性:**事

2021-08-20 21:37:17 81

原创 Redis订阅发布模式使用

概述Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。订阅与发布消息图示:下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:常用命令命令描述PSUBSCR

2021-08-19 21:19:31 57

原创 Redis配置文件参数详解

Redis.confRedis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf一般情况下,会单独拷贝出来一份进行操作,来保证初始文件的安全# 获取所有配置项config get *Units(单位)# Redis configuration file example.## Note that in order to read the configuration file, Redis must be# started with the file path as f

2021-08-18 20:56:07 799

原创 Redis数据类型和应用场景

概述Redis 是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询和流的地理空间索引。Redis 具有内置的复制,Lua 脚本,LRU 驱逐,事务和不同级别的磁盘持久性,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供了高可用性。五大基础类型String、List、Set、Hash、Zset三大特殊类型Bitmaps、HyperLogLog、

2021-08-17 22:31:01 81

原创 Linux安装Redis与部署

Redis下载官方网站:https://redis.io中文官方网站:http://www.redis.cn安装步骤1. 下载 redis-6.0.6.tar.gz 放 /opt 目录2. 进入 /opt 目录下,执行解压命令:tar -zxvf redis-6.0.6.tar.gz3. 解压完成后进入 redis-6.0.6 目录,执行 make 命令如果 make 安装失败,则需要安装或升级 gcc5. 如果 make 完成后继续执行 make install6. 安装成功后查

2021-08-16 21:38:37 150

原创 Go数据结构与算法之散列表

概述散列表(Hash table,也叫哈希表),是根据关键码值 (Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。应用实例使用 Hash table 将该员工的信息(id,name…)存储,当输入该员工的 id 时,要求查找到该员工的所有信息。package mainimport ( "fmt" "os")// Emp 定义type Emp struct {

2021-08-15 14:04:03 141

原创 Go数据结构与算法之迷宫问题

迷宫问题问题描述:有一个迷宫地图,其中地图中有一些不过达的位置(墙壁、障碍)。从一个起点开始,一步一步走到终点,如何找到一条到达的道路呢?代码实现实现思路:利用二位数组来模拟迷宫地图,0表示没有走过的点,1表示墙壁,2表示走通的点,3表示走不通的点,按照自定义的寻路策略,遍历寻找路径,如果是死路则标示该路径走不通,回到起点,再重新找一条新路,以此类推,直到走通为止。这种方法又称作为回溯法(递归)。package mainimport "fmt"// SetWay 寻找出路 i,j表示地图的

2021-08-14 20:50:14 133

原创 Go数据结构与算法之栈

概述栈(stack)是一个先入后出(FILO-First In Last Out)的有序列表。栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据堆栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。栈的示意图应用场景子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序

2021-08-13 23:57:58 139

原创 Go数据结构与算法之排序

冒泡排序冒泡排序(Bubble Sort)的基本思想是:通过依次比较相邻的两个元素,判断两个元素是否满足大小关系,如果不满足则交换两个元素,每一次冒泡会让至少一个元素移动到它应该在的位置,这样n次冒泡就完成了n个数据的排序工作。冒泡排序是一种稳定排序算法。实现过程package mainimport "fmt"func main() { arr := []int{8, 4, 6, 3, 0, 2} fmt.Println(arr) // [8 4 6 3 0 2] // 第一次冒泡

2021-08-12 22:14:20 67

原创 Go数据结构与算法之链表

概述链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的 “指针” 将一组零散的内存卡串联起来实现的。单向链表单向链表其中有两个结点是比较特殊的,它们分别是第一个结点和最后一个结点。我们习惯性地把第一个结点叫作头结点,把最后一个结点叫作尾结点。其中,头结点用来记录链表的基地址。有了它,我们就可以遍历得到整条链表。而尾结点特殊的地方是:指针不是指向下一个结点,而是指向一个空地址 NULL,表示这是链表上最后一个结点。插入节点删除节点代码实现package ma

2021-08-11 23:36:59 80

原创 Go数据结构与算法之队列

概述队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则,即:先存入队列的数据,要先取出,后存入的要后取出。数组模拟队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下,其中 MaxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear 则是随着数据输入而改变。非环形队列当我们将数据存入队列时称为 “addqueue”,a

2021-08-10 21:41:22 73

原创 Go数据结构与算法之稀疏数组

需求背景先看一个实际的需求,有一个 15 × 15 的五子棋盘中,实现存盘退出和续上盘的功能。如下图所示,你会怎么做?普通数组方法实现将棋盘抽象化,用一个 15 × 15 的数组来表示,0 表示空点,1 表示黑子,2 表示白子。代码实现package mainimport "fmt"func main() { var chessMap [15][15]int // 黑子 chessMap[2][2] = 1 // 白子 chessMap[3][3] = 2 // 打印结

2021-08-09 22:40:55 155

原创 Go基础12:网络编程

协议(tcp/ip)TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是 Internet 最基本的协议、Internet 国际互联网络的基础,简单地说,就是由网络层的 IP 协议和传输层的 TCP 协议组成的。OSI 与 Tcp/ip 参考模型[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6ZNO1K0-1628415906320)

2021-08-08 17:45:41 55

原创 Go基础11:反射机制

概述反射可以在运行时动态获取变量的各种信息,比如变量的类型(type),类别(kind),如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法),通过反射,可以修改变量的值,可以调用关联的方法。应用场景不知道接口调用那个函数,根据传入参数在运行时确定调用的具体接口,这种需要对函数或方法反射。对结构体序列化时,如果结构体有指定 Tag,也会使用到反射生成对应的字符串。reflect 包Go 语言中的反射是由 reflect 包提供支持的,它定义了两个重要的类型 Type 和

2021-08-07 21:33:21 33

原创 Go基础10:协程和管道

概述进程/线程进程:是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。线程:是进程的一个执行实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程可以创建和撤销多个线程,同一个进程中的多个线程之间可以并发执行。并发/并行多线程程序在单核心的 cpu 上运行,称为并发;多线程程序在多核心的 cpu 上运行,称为并行。并发与并行并不相同,并发主要由切换时间片来实现“同时”运行,并行则是直接利用多核实现多线程的运行,Go程序可以设置使用核心数,

2021-08-06 22:42:32 269

原创 Go基础09:单元测试

概述Go 语言中自带有一个轻量级的测试框架 testing 和自带的 go test 命令来实现单元测试和性能测试,testing 框架和其他语言中的测试框架类似,可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例。通过单元测试,可以解决如下问题:确保每个函数是可运行,并且运行结果是正确的。确保写出来的代码性能是好的。单元测试能及时的发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让程序能够在高并发的情况下

2021-08-05 21:49:12 82

原创 Go基础08:文件操作、命令行参数和JSON处理

概述文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的 word 文档,txt 文件,excel 文件…都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音…输入流和输出流文件在程序中是以流的形式来操作的。流:数据在数据源(文件)和程序(内存)之间经历的路径。输入流:数据从数据源(文件)到程序(内存)的路径。输出流:数据从程序(内存)到数据源(文件)的路径。File 结构体os.File 封装所有文件相关操作,File 是一个结构

2021-08-04 21:56:13 179

原创 Go基础07:面向对象编程

概述Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说 Golang 支持面向对象编程特性是比较准确的。Golang 没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解 Golang 是基于 struct来实现 OOP特性的。Golang 面向对象编程非常简洁,去掉了传统 OOP 语言的继承、方法重载、构造函数和析构函数、隐藏的 this指针等等。Golang

2021-08-03 22:36:03 106

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除