go语言基础 -- 面向对象编程
go语言面向对象编程思想
面向对象编程离不开封装、继承、多态三个特性,go语言与其他c++、java不太一样,没有类的概念,面向对象的实现也有些区别,下面分别描述。
go语言封装
- 结构体中字段如欲对外隐藏,首字母小写,对其的操作则通过结构体绑定的Set和Get函数进行;
- 结构体所在的包提供一个首字母大写的工厂模式函数用来创建对应的结构体对象,类似于构造函数;
- 实际上go里面的封装,已经融入到包、方法、函数里面了
go语言继承
在go语言中,如果一个结构体中嵌套了另一个匿名结构体对象,那么这个结构体可以直接访问这个匿名结构体的字段和方法(无论大小写),从而实现继承的特性。
例:
type Goods {Name stringPrice int
}
type Book struct {// 这里直接包含Goods结构体,那么Book的对象可直接访问Name和Price字段GoodsWriter string
}
在使用时,我们可以显式地调用Goods从而调用Goods相关的字段或方法,也可以直接隐式地调用,省略Goods:
mathbook := Book{}
mathbook.Goods.Name = "math"
mathbook.Goods.SetPrice(15) // 假设SetPrice是Goods绑定的方法
mathbook.Price = 20 // 这里可省略Goods
mathbook.Writer = "lzs"
当我们省略写法调用基类型的字段或方法时,编译器首先在当前类型中找有没有对应的字段或方法,有就调用,没有就看其嵌套的结构体有没有。若都找不到,则报错。若有多层嵌套,则会依次往上找。
必须显式地调用匿名结构体的场景:
- 如果当前结构体有方法或字段与基类型的方法或字段相同,也是遵从就近原则,但如果这种场景我们就是想去调用基类型的方法或字段,那么就必须显式地调用匿名结构体名,如上面的Goods必须显式地调用;
- 如果当前结构体嵌套了多个匿名结构体,且这些匿名结构体有共同的字段或方法,我们就需要通过显式调用来指定我们想要操作的具体字段或方法是属于哪一个结构体的;
在创建结构体变量时,也可以同时指定结构体的字段值,写法如下:
// 写法有顺序要求
mathbook := Book{Goods{"math", 15}}
// 或以下写法,无顺序要求
mathbook := Book{Name : "math",Price : 15,}
有多个匿名结构体依次写即可。
一些实际使用的细节:
- 在嵌套匿名结构体时,也可以嵌套匿名结构体的指针,写法如下
type computer struct {*Goods
}
- 除了结构体类型外,基本数据类型如int也可以写成匿名的方式,这时调用时需要包含类型:
type computer struct {*Goodsint
}func main() {huashuo := computer{}huashuo.int = 3000
}
匿名数据类型在同一个结构体中,只能有一个
- 如果同时嵌套多个匿名结构体,也就是go语言中的多重继承的概念,通常为了调用的简洁性,go里面尽量避免多重继承。
多态
由于多态涉及到接口的概念,我们在下一个篇章来讲解
相关文章:
go语言基础 -- 面向对象编程
go语言面向对象编程思想 面向对象编程离不开封装、继承、多态三个特性,go语言与其他c、java不太一样,没有类的概念,面向对象的实现也有些区别,下面分别描述。 go语言封装 结构体中字段如欲对外隐藏,首字母小写&…...
HarmonyOS—编译构建概述
编译构建是将应用/服务的源代码、资源、第三方库等,通过编译工具转换为可直接在硬件设备上运行的二进制机器码,然后再将二进制机器码封装为HAP/APP软件包,并为HAP/APP包进行签名的过程。其中,HAP是可以直接运行在模拟器或真机设备…...
下载element-ui 资源,图标 element-icons.woff,element-icons.ttf 无法解码文件字体
css下载地址:https://unpkg.com/element-ui2.15.14/lib/theme-chalk/index.css js下载地址:https://unpkg.com/element-ui2.15.14/lib/index.js 图标及文字文件下载地址: element-icons.woff:: https://unpkg.com/element-…...
Flutter整体框架
Flutter整体框架由三部分组成:Framework、Engine和Embedder。 Framework Framework提供了一个用 Dart 语言编写的现代、反应式框架,由许多抽象的层级组成。它包括一套丰富的布局、动画、绘制、手势UI组件及配套代码,以及更基础的异步、文件、…...
JVM堆内存中新生代晋升到老年代的条件
1. 一般年龄判断 当对象在Eden区中经过第一次 Minor GC 后,如果仍然存活,则会被移动到 From Survivor 区,并且对象的年龄设为 1。每经过一次 Minor GC,存活下来的对象年龄加 1,若存活对象在 From Survivor 区的年龄达…...
前端监控为什么采用GIF图片做埋点?
一、什么是埋点监控 前端监控是开发人员用来跟踪和维护应用程序表现层的运行状况的过程和工具。它主要包括三种类型:数据监控、性能监控和异常监控。 1、数据监控 主要是为了收集跟用户相关的数据,例如用户设备类型、浏览器版本、页面浏览量(…...
webstorm 创建运行纯Typescript项目
创建一个空项目,在项目根目录创建一个tsconfig.json文件自动配置: 打开终端输入tsc --init,即可自动生成tsconfig.json文件手动配置: 在项目根目录下新建一个tsconfig.json文件,并配置如下内容 具体配置可以直接使用下面的配置&am…...
GO-接口
1. 接口 在Go语言中接口(interface)是一种类型,一种抽象的类型。 interface是一组method的集合,接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它…...
【C语言】动态内存管理常用函数
前言 我们在之前学习的数组开辟的空间是固定不变的,有时候我们需要的空间⼤⼩在程序运⾏的时候才能知道~ c语言中的动态内存开辟,让程序员⾃⼰可以根据实际需求申请和释放相应空间,这使得空间的开辟变得灵活了许多。 欢迎关注个人主页&#x…...
【OpenGL】(1) 专栏介绍:OpenGL 库 | 3D 计算机图形应用 | GPGPU 计算 | 3D 建模和 3D动画 | 渲染技术介绍
🔗 《C语言趣味教程》👈 猛戳订阅!!! 💭 写在前面:本专栏主要内容是关于 3D 计算机图形技术的学习,重点是学习与此技术相关的 3D 实时渲染 (3D real-time rendering) 技术。我们会以…...
SPI总线知识总结
1 SPI的时钟极性CPOL和时钟相位CPHA的设置 1.1 SPI数据传输位数 SPI传输数据过程中总是先发送或接收高字节数据,每个时钟周期接收器或发送器左移一位数据。对于小于16位的数据,在发送前必须左对齐,如果接收的数据小于16位,则采用软…...
【异常关闭clas*h,导致无法访问任何网页_解决办法】
各位经常使用Clash Scientific浏览的朋友们,我要建议大家不要在开启Clash代理的情况下直接关机或者重启电脑,这样的操作会导致网络配置出现严重问题,带来不必要的麻烦。 这是我亲身体验的一次痛苦教训。不管是我在关闭or开启Clas*h代理后&am…...
STL-map和set
目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 3.1 set 3.1.1 set介绍 3.1.2 set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器(类型是双向迭代器) 4. set的容量 5.set修改操作 6、operator 7. set的使用举例 3.2 map 3.2.1map介绍 3.2.2map的…...
[蓝桥杯 2020 省 B1] 整除序列
[蓝桥杯 2020 省 B1] 整除序列 题目描述 有一个序列,序列的第一个数是 n n n,后面的每个数是前一个数整除 2 2 2,请输出这个序列中值为正数的项。 输入格式 输入一行包含一个整数 n n n。 输出格式 输出一行,包含多个整数…...
【Android】View 的滑动
View 的滑动是 Android 实现自定义控件的基础,同时在开发中我们也难免会遇到 View 的滑动处理。其实不管是哪种滑动方式,其基本思想都是类似的:当点击事件传到 View 时,系统记下触摸点的坐标,手指移动时系统记下移动后…...
基于ZYNQ的PCIE高速数据采集卡的设计(一)
作为信息处理的第一步,数据采集的作用越来越重要。目前,数据采集已经在航 空、民用、军事、医疗等领域得到广泛应用。随着相关技术的不断发展,信号频率越 来高,带宽越来越大,使得数据采集技术逐渐向高速大数据的方向…...
渗透测试工具 nmap 详解
官网:Nmap: the Network Mapper - Free Security Scanner -p<端口范围>:仅扫描指定的端口 用于扫描指定端口是否开放,在 -p 后输入指定的端口,以英文","进行拼接多个指定端口。 nmap -p 80&…...
Ubuntu下安装Scala
前言 弄了一下终于成功装上了,这里对此进行一下总结 安装虚拟机 VMware虚拟机安装Ubuntu(超详细图文教程)_vmware安装ubuntu-CSDN博客https://blog.csdn.net/qq_43374681/article/details/129248167Download Ubuntu Desktop | Download | …...
无法启动报,To install it, you can run: npm install --save @/components/iFrame/index
运行的过程中后台报错 npm install --save /components/iFrame/index,以为是安装三方依赖错误,经过多次重装node_modules依然没有用。 没办法,只能在项目中搜索 components/iFrame/index这个文件。。突然醒悟。。。 有时候,犯迷…...
深入理解现代JavaScript:从语言特性到应用实践
💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 JavaScript作为一门动态、解释性脚本语言&…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
