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

news2025/1/14 18:39:04

        面向过程转换到面向对象,那么必然会涉及到几个特性:封装,继承,多态,那么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.coloradmin.cn/o/915073.html

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

相关文章

BATPowerShell实现本地文件自动上传FTP服务器

运维工作中,经常需要一些脚本来实现自动化,今天分享本地文件自动上传FTP的两种解决办法: 一、使用BAT自动上传FTP 使用批处理(BAT)命令文件将本地文件夹内容上传到FTP服务器需要使用Windows自带的命令行工具&#xf…

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

一.拉取镜像 docker pull mysql:5.7 docker pull owncloud 二.创建容器 1.MySQL容器 docker run -d --name db1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456. -e MYSQL_DATABASEowncloud -e MYSQL_USERowncloud -e MYSQL_PASSWORDowncloud mysql:5.7 docker run: 创建和运行…

2023年03月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:和数 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 2 1, 4 1 3。 时间限制:10000 内存限制:65536 输入 共两行&#x…

飞天使-k8s基础组件分析-控制器

文章目录 控制器含义解释pod的标签与注释ReplicaControllerReplicaSetDeploymentsDaemonSetJobCronjob参考文档 控制器含义解释 空调遥控器知道吧ReplicationController: ReplicationController确保在任何时候都运行指定数量的pod副本。换句话说,一个ReplicationCo…

DRF ImageFiled字段时会加上域名和乱码的问题

问题描述: 一张表的image类型为imageFiled # ############################### 商品 ############################### class Category(models.Model):"""类别名称比如:螃蟹、大米、油等"""categoryname models.CharFie…

Unity 之`Physics.Raycast()`方法,射线检测

文章目录 总述参数解释形参前两个变量可以用Ray 来代替 返回值 总述 当你在Unity中使用Physics.Raycast()方法时,你实际上是在进行一种射线检测,以查看一条射线是否与场景中的碰撞体相交。这可以用来实现很多不同的功能,如点击选择物体、射击…

Windows如何安装Git

一、简介 Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。特点:项目越大越复杂,协同开发者越多,越能体现出 Git 的高性能和高可用性。 二、…

31、springboot 配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口

配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口 ★ 设置HTTP服务端口: - server.port或者SERVER_PORT环境变量——总结来说,其实就是要配置server.port外部配置属性。▲ 同样遵守如下优先级: 这些都是外部配置源&#x…

探索Vue生命周期钩子函数:从创生到销毁

Vue这个引领前端开发潮流的框架,其优雅的响应式数据绑定和组件式开发方式,使得它备受瞩目。然而,Vue的魅力绝不仅限于此,它还赋予开发者一组神奇的生命周期钩子函数,能够在组件的各个成长阶段插入自定义代码。本文将带…

css 实现四角边框样式

效果如图 此图只实现 左下与右下边角样式 右上与左上同理 /* 容器 */ .card-mini {position: relative; } /* 左下*/ .card-mini::before {content: ;position: absolute;left: 0;bottom: 0;width: 20px;height: 20px;border-bottom: 2px solid #253d64;border-left: 2px so…

赴日程序员学日语需要学多久?

现在很多国内程序员想转型做赴日IT,但是因为完全没有日语经验,又长期从事解决问题debug的工作,所以非常担心自己学不会日语。其实你的心底里可能比较担心是,投入了很多时间发现学不会文科类型的语言,自己没有学母语以外…

[保研/考研机试] KY124 二叉搜索树 浙江大学复试上机题 C++实现

题目链接&#xff1a; 二叉搜索树_牛客题霸_牛客网判断两序列是否为同一二叉搜索树序列。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692722892652 描述 判断两序列是否为同一二叉搜索树序列 输入描述&#xff1a; 开始一个数n&#xff0c;(1<…

Python数据采集实战-使用BeautifulSoup框架解析HTML文档并提取所需内容(附源码和实现效果)

实现功能 使用BeautifulSoup框架解析HTML文档并提取所需内容的例子&#xff1a;假设我们要从以下HTML文档中提取所有超链接的链接地址 实现代码 from bs4 import BeautifulSoup import requests# 发送请求并获取HTML文档 url "https://www.baidu.com" response r…

c(Bua-Cpa-Thi-Val-Asn-Cys)-Pro-d-Arg-NEt2 acetate,1647120-04-4,试剂特点介绍

英文名&#xff1a;c(Bua-Cpa-Thi-Val-Asn-Cys)-Pro-d-Arg-NEt2 acetate CAS&#xff1a;1647120-04-4 1.Molecular formula&#xff1a;C44H64ClN11O10S2 2.Molecular weight&#xff1a;1006.63 3.Packaging specification&#xff1a;1g、5g、10g, flexible packaging, inc…

宠物小程序开发

在当今社会&#xff0c;宠物已成为许多人生活中不可或缺的一部分。宠物市场的持续增长为创业者提供了巨大的商机。然而&#xff0c;作为一个创业者&#xff0c;要在竞争激烈的宠物市场中脱颖而出并不容易。因此&#xff0c;开发一个专属于自己的宠物小程序成为了解决这一难题的…

Linux下的Shell编程——Shell概述和入门(一)

前言&#xff1a; Shell还是一个功能相当强大的编程语言&#xff0c;易编写、易调试、灵活性强。为了方便后续的学习&#xff0c;我们需要学习在Linux系统下的Shell编程 目录 一、Shell概述 1.Linux 提供的 Shell 解析器有 2. 默认的解析器是 bash 二、Shell 脚本入门 1.脚…

php+echarts实现数据可视化实例3

效果 全部代码 <?php include(includes/session.inc); include(includes/SQL_CommonFunctions.inc); ?> <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" …

OpenGL —— 2.2、Shader之间数据传输、向Shder传输数据

Shader OpenGL着色器&#xff08;shader&#xff09;是一种用于编写图形渲染代码的编程语言。它们在图形处理单元&#xff08;GPU&#xff09;上运行&#xff0c;用于控制渲染管线的不同阶段。 在OpenGL中&#xff0c;有两种主要类型的着色器&#xff1a;顶点着色器和片段着色器…

Linux 压缩解压(归档管理):tar命令

计算机中的数据经常需要备份&#xff0c;tar是Unix/Linux中最常用的备份工具&#xff0c;此命令可以把一系列文件归档到一个大文件中&#xff0c;也可以把档案文件解开以恢复数据。 tar使用格式 tar [参数] 打包文件名 文件 tar命令很特殊&#xff0c;其参数前面可以使用“-”&…

windows端口被占用——使用taskkill干掉不听话的进程

8080端口被占用为例 1. win R 输入 cmd 回车 进入命令行界面 2. 查看端口占用情况 netstat -aon|findstr 8080 查到8080被24308 进程占用 3. 杀手父进程 使用taskkill 干掉不听话的进程 taskkill /f /t /pid 24308 C:\Users\84869>taskkill /?TASKKILL [/S system…