GOLANG面向对象:封装 继承 多态

        面向过程转换到面向对象,那么必然会涉及到几个特性:封装,继承,多态,那么Golang中的面向过程会有什么特性?那我们来仔细说一说:

封装:

        首先要一个类的概念,类就像一下工厂,你需要的衍生类,直接通过工厂类可以实现,简单来理解就是:公共方法,我们把它放在项目的最外层,需要用到的时候直接调用该类,这样做的好处就是减少代码量,并且代码的容错率健壮性都会有相应的提升

继承:

        简单来说就是继承父辈的一些东西,代码中也是如此,一些共用的属性我们可以把他们集中到一个特殊的父级代码中,通过继承来实例化一些公共的属性,这样做的好处:统一管理公共的属性不会出现多个开发工程师写出了多个“哈姆雷特”的现象,只要遵循公共属性通过继承获取父级的属性,那么代码的通用性会大大提高

多态:

        同一个性质的不同表现方式,比如接口里面定义的方法的具体实现是多种多样的,继承父级获取的方法,可以直接使用也可以重新定义后再使用,从而使一个方法有多种表现形式导致不同的结果产生


代码解释:

        封装继承:其实我们在前面的GIN框架中已经使用过,比如我们应用的包,都是封装好的类,如果这样说还是无感的话,那么GORM中有一个特别明显的用法,比如我们在数据库的操作的过程中,首先需要定义结构体,在定义的过程中我们使用到了:  gorm.Model ,这一个例子就很好的说明了这两个属性,首先来说疯转,看下源码:

自定义结构体

type Userst struct {
        Uid          uint64    `json:"uid"`
    Username     string    `json:"username" `
    gorm.Model
}

gorm.Model指向的就是下面的代码:

type Model struct {
    ID        uint `gorm:"primarykey"`
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt DeletedAt `gorm:"index"`
}

        封装到这里就结束了,那么继承还有一些注意点还需要深入的讲解,所以我们下面就讲一下继承中的就近原则,这个词是不是特别熟悉?SQL中有一个最左原则,最左原则有兴趣的可以课外了解一下,我们主要讲解集成中的就近原则

机构体需要了解的概念:

        1.结构体,如果结构体的名字首字母大写,可以被其他地方调用,如果是小写,其他地方不能被调用,只能在当前作用域调用

        2.结构体属性,如果是首字母大写,可以被其他地方赋值(指针方式来实现),如果是小写,其他地方不能被调用,只能在当前作用域调用

打印结果:

 分析:uid没有进行赋值,所以输出的是0,其他的字段赋值了,输出的是赋予的值


那么我们换一个赋值方式:

 打印结果:

从上面的代码来看两种赋值方式都可以,其实上这是有区别的,到底是有什么区别?我们再看看新的代码:

输出结果:

分析:为什么会这个样子?实际上就是就近原则,另外还有一种情况,看下面的距离

代码段:

输出结果:

 分析:如果子级结构体集成父级结构体,子级结构体与父级结构体有相同的属性,先满足子集结构体的赋值,这也是就近原则的一种体现,并且以上例子也体现了多态,结合这几个例子,面向对象的三属性就可以理解清楚了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/50157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS应用开发者高级认证练习题

系列文章目录 HarmonyOS应用开发者基础认证练习题 HarmonyOS应用开发者高级认证练习题 文章目录 系列文章目录前言一、判断二、单选三、多选 前言 本文所有内容来源于个人进行HarmonyOS应用开发者系列认证的学习过程中所做过的练习题,所有答案均是个人作答&#x…

iptables防火墙(SNAT与DNAT)

目录 1 SNAT 1.1 SNAT原理与应用 1.2 SNAT工作原理 1.3 SNAT转换前提条件 2 SNAT示例 ​编辑 2.1 网关服务器配置 2.1.1 网关服务器配置网卡 2.1.2 开启SNAT命令 2.2 内网服务器端配置 2.3 外网服务器端配置 2.4 网卡服务器端添加规则 2.5 SNAT 测试 3 DNAT 3.1 网卡…

wazuh环境配置及案例复现

文章目录 wazuh环境配置及案例复现wazuh环境配置 案例复现 wazuh环境配置及案例复现 wazuh环境配置 进入官网下载ova软件 https://documentation.wazuh.com/current/deployment-options/virtual-machine/virtual-machine.html 打开下载的ova,密码和用户名会显示…

2分钟搭建自己的GPT网站

如果觉得官方免费的gpt(3.5)体验比较差,总是断开,或者不会fanqiang,那你可以自己搭建一个。但前提是你得有gpt apikey。年初注册的还有18美金的额度,4.1号后注册的就没有额度了。不过也可以自己充值。 有了…

开发一个npm组件包

vue项目初始化 vue create mytest 启动项目以后 组件开发 开发的组件写在 package中 如下如例 开发一个 listpage的组件 里面放了一个a链接注册组件配置打包 "package": "vue-cli-service build --target lib ./src/package/index.js --name managerpage -…

linux文本三剑客

linux文本三剑客 1、grep2、sed 1、grep 过滤 参数用法作用-igrep -i STRING xxx.txt从xxx.txt文件查找不区分大小写STRING-wgrep -w STRING xxx.txt精确匹配STRING-egrep -e STRING1 -e STRING2 xxx.txt查找多个STRING行-ngrep -n STRING xxx.txt查看STRING 在第几行-vgrep …

使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。

文章目录 1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。2、安装搭建私有仓库 Harbor3、编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。具体要求如下:4、Dockerfile快速搭建自己专属的L…

【每日一招小技巧】编译安装提升系统自带的java版本

hello,大家好,又到了每日一招的环节,今天要给大家介绍的是,如何用源码安装的方式,升级系统自带的ava版本! 首先,我们要查看一下我们系统自带的java版本是多少,怎么查看呢&#xff1…

机器学习简介

文章目录 引言1. 从找规律说起2. 机器学习应用2.1 有监督学习2.2 无监督学习2.2.1 聚类2.2.2 降维 3. 机器学习一般流程4. 机器学习常用概念5. 深度学习简介5.1 引入 -- 猜数字5.2 深度学习5.2.1 隐含层/中间层5.2.2 随机初始化5.2.3 损失函数5.2.4 导数与梯度5.2.5 梯度下降5.…

协议的分层结构

1.1TCP/IP 协议 为了使各种不同的计算机之间可以互联,ARPANet指定了一套计算机通信协议,即TCP/IP 协议(族). 注意TCP /IP 协议族指的不只是这两个协议 而是很多协议, 只要联网的都使用TCP/IP协议族 为了减少 协议设计的复杂度 ,大…

【Nginx】Nginx 简介

Ngnix 特点 模块化设计:良好的扩展性,可以通过模块方式进行功能扩展。高可靠性:主控进程和 worker 是同步实现的,一个 worker 出现问题,会立刻启动另一个 worker。内存消耗低:一万个长连接(kee…

Php“牵手”淘宝商品销量数据采集方法,淘宝API接口申请指南

淘宝天猫商品销量接口 API 是开放平台提供的一种 API 接口,它可以帮助开发者获取商品的详细信息,包括商品的标题、描述、图片,月销量,总销量等信息。在电商平台的开发中,销量接口API是非常常用的 API,因此本…

什么是遗传算法(Genetic Algorithm,简称 GA)?

目录 一、遗传算法介绍二、遗传算法应用场景三、遗传算法具体案列1、求解旅行商问题(TSP 问题)2、求解一个矩阵中的最大值3、基于遗传算法的图像压缩方法 四、遗传算法重要意义五、生物进化与遗传算法之间的关系 一、遗传算法介绍 遗传算法(…

天润融通「微藤大语言模型平台2.0」以知识驱动企业高速增长

8月23日,天润融通(又称“天润云”,2167.HK),正式发布「微藤大语言模型平台2.0」。 “大模型企业知识企业知识工程”。 “不能有效记录和管理知识的企业是不能持续进步的。在企业的生产流程中,相比于其他场景&#xff0…

【网络安全】防火墙知识点全面图解(二)

本系列文章包含: 【网络安全】防火墙知识点全面图解(一)【网络安全】防火墙知识点全面图解(二) 防火墙知识点全面图解(二) 21、路由器的访问控制列表是什么样的?22、防火墙的安全策…

情人节定制:HTML5 Canvas全屏七夕爱心表白特效

❤️ 前言 “这个世界乱糟糟的而你干干净净可以悬在我心上做太阳和月亮。”,七夕节表白日,你要错过吗?如果你言辞不善,羞于开口的话,可以使用 html5 canvas 制作浪漫的七夕爱心表白动画特效,全屏的爱心和…

【无标题】idea 中 SpringBoot 点击运行没反应,按钮成灰色

问题描述 在使用 Spring Boot 开发项目时,可能会遇到一个问题:点击运行按钮后,控制台没有任何输出,项目界面也没有显示。这种情况可能是由多种原因导致的,本文将介绍一些常见的解决方法。 解决方法 首先看下Groovy插…

AndroidStudio升级后总是Read Time Out的解决办法

AndroidStudio升级后在gradle的时候总是Time out,遇到过多次,总结一下解决办法 1、gradle下载超时 在工程目录../gradle/wrapper/gradle-wrapper.properties中找到gradle版本的下载链接,如下图: 将其复制到迅雷里下载&#xff0…

⛳ Java 网络编程

目录 ⛳ Java 网络编程🎨 一、TCP / IP 协议👣 二、IP 和 端口号🎁 三、TCP 网络层编程🎨 3.1、Socket⭐ 3.2、基于Socket的TCP编程 🏭 四、UDP网络编程🐾 五、URL编程 ⛳ Java 网络编程 🎨 一…

JavaSE 数组

定义: int []arr; int arr[]; 初始化 // 完整格式 int arr[] new int[]{1, 2, 3}; // 简单格式 int arr[] {1, 2, 3}; 数组的元素访问、遍历 按照下标访问即可。数组的长度函数为 arr.length()。idea快速生成遍历的方法:数组名.fori 静态初始化 &a…