首页 > 其他分享 >Go语言---接口interface、接口转换、继承、类型查询

Go语言---接口interface、接口转换、继承、类型查询

时间:2024-07-11 16:56:41浏览次数:9  
标签:接口 --- 集合 接口类型 子集 类型 interface

接口(interface)概念

在 Go 语言中,接口(interface)是一个自定义类型,接口类型具体描述了一系列方法的集合。
接口又称为动态数据类型,在进行接口使用的的时候,会将接口对位置的动态类型改为所指向的类型,会将动态值改成所指向类型的结构体。

接口可以让我们将不同的类型绑定到一组公共的方法上,从而实现多态和灵活的设计。

接口类型是一种抽象的类型,它不会暴露出它所代表的对象的内部值的结构和这个对象支持的基础操作的集合,它们只会展示出它们自己的方法。因此接口类型不能将其实例化。
Go通过接口实现了鸭子类型(duck-typing):“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子”。我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

接口的定义

type Humaner interface{
	SayHi()
}
  • 接口命名习惯以 er 结尾
  • 接口只有方法声明,没有实现,没有数据字段
  • 接口可以匿名嵌入共它接口,或嵌入到结构中

接口的实现

  • 接口是用来定义行为的类型。这些被定义的行为不由接口直接实现,而是由用户定义的类型实现,一个实现了这些方法的具体类型是这个接口类型的实例。
  • 如果用户定义的类型实现了某个接口类型声明的一组方法,那么这个用户定义的类型的值就可以赋给这个接口类型的值。这个赋值会把用户定义的类型的值存入接口类型的值。
    在这里插入图片描述
  • 在定义接口类型的变量以后,只要是实现了此接口方法的类型,就可以赋值给这个接口类型的变量。
  • 赋给它什么类型就调用此类型实现的接口方法。

更为常用的方法是定义一个普通函数,函数的参数为接口类型,然后通过调用这个函数,实现不同的方法—相当于多态

在这里插入图片描述

  • 也可以通过切片的方法实现
    在这里插入图片描述

接口的继承

超集

如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集。

子集

对于两个集合A与B,如果集合A的任何一个元素都是集合B的元素,我们就说集合A包含于集合B,或集合B包含集合A,也说集合A是集合B的子集。如果集合A的任何一个元素都是集合B的元素,而集合B中至少有一个元素不属于集合A,则称集合A是集合B的真子集。空集是任何集合的子集。

任何一个集合是它本身的子集.空集是任何非空集合的真子集。

接口之间也是可以继承的

在这里插入图片描述

接口之间的转换—变量转换

超集可以转换为子集,反过来不可以
在这里插入图片描述

  • 转换以后只能调用子集有的方法了
    在这里插入图片描述
    在这里插入图片描述

空接口

空接口(interface{})不包含任何的方法,正因为如此,所有的类型都实现了空接口,因此空接口可以存储任意类型的数值。它有点类似于语言的void*类型。
在这里插入图片描述
当函数可以接受任意的对象实例时,我们会将其声明为interface{},最典型的例子是标准库fmt中 Printxxx系列的所数,例如:
在这里插入图片描述

类型查询

我们知道 interface 的变量里面可以存储任意类型的数值(该类型实现了 interface)。那么我们怎么反向知道这个变量里面实际保存了的是哪个类型的对象呢?目前常用的有两种方法:

  • comma-ok断言
  • switch 测试

comma-ok断言

if value, ok := data.(int); ok == true{
}

在这里插入图片描述

switch测试

switch value := data.(type) {
	case int:
		.....
	case string:
		...........
	case Student:
		.........
	}

在这里插入图片描述

标签:接口,---,集合,接口类型,子集,类型,interface
From: https://blog.csdn.net/m0_73537205/article/details/140095472

相关文章

  • Go语言---面向对象编程-匿名字段、同名字段、方法、方法集、方法的继承与重写、方法值
    基本概念对于面向对象编程的支持Go语言设计得非常简洁而优雅。因为,Go语言并没有沿袭传统面问对象编程中的诸多概念,比如继承(不支持继承,尽管匿名字段的内存布局和行为类似继承,但它并不是继承)、虚函数、构造所数和析构函数、隐藏的this指针等。尽管Go语言中没有封......
  • AutoHotKey自动热键(五)添加WINDOWS秘笈指令-输入瞬间启动功能
    在AUTOHOTKEY的使用中,不仅仅可以监听组合热键,还可以监听正常文本击键录入,这是另一种监听方式,比如依次击键jsq之后直接弹出<计算器>工具,或者依次击键sj之后直接输出135****5564的手机号码,等等,这就是autohotkey的录入击键监听,以双冒号为开头::因这种录入监听像极了......
  • text2speech文生音频模型XTTS-V2部署带UI
    text2speech文生音频模型XTTS-V2部署带UI模型下载链接,及前端代码效果链接见个人博客:https://pylzzz.online效果图:python后端代码flask框架由于使用的是自己电脑的gpu运算,所以中间有转发的过程,利用内网穿透和虚拟局域网通信。内网穿透教程可见个人博客所需依赖tts......
  • 基于51单片机智能无线对讲机信道可调双工语音LCD12864设计24-166
    24-166、基于51单片机智能无线对讲机设计信道可调双工语音传输+LCD12864液晶显示频道设计产品功能描述:本设计由主机和从机两部分组成。主机和从机之间通过2.4G无线进行语音通信。主从机由STC15W408AS单片机电路+麦克风声音采集电路+LM386声音功放模块电路+LED指示灯电路+按......
  • TREK高压功率放大器维修trek高压电源609E-6
    美国Trek维修产品包括:高压放大器、电源、静电电压表、高压功能发生器、放大器、静电测量仪、荷电板、信号放大器、高压电源、功率放大器、高压功能发生器、高压放大器、接触电压表、非接触式电压表、板载控制器、ESD和传感器、ESD电压表、带电板、电离器、表面电阻计等。高压......
  • 【java】实现sse调用websocket接口,忽略wss证书并控制sse吐字速度
    maven<dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.5.3</version></dependency>AsyncConfigpackag......
  • 昇思学习打卡-11-SSD目标检测
    文章目录模型介绍模型的特点数据采样网络结构损失函数公式实现NMS训练过程模型介绍SSD是单阶段的目标检测算法,通过卷积神经网络进行特征提取,取不同的特征层进行检测输出,所以SSD是一种多尺度的检测方法。在需要检测的特征层,直接使用一个3×3卷积,进行通道的变换。SSD......
  • Vue 中 v-pre、v-once、v-cloak 标签的深度解析与案例展示
    目录v-prev-once​​​​​​​v-cloak​​​​​​​v-cloak介绍​​​​​​​插值表达式闪烁问题v-pre        当使用v-pre指令时,不会进行编译操作。所有的Vue模板语法都将得以完整保留,并会按照其初始的形态进行渲染。其中,最为常见的应用场景便是......
  • BBdown -- 更好的B站视频下载软件
    来自......
  • Linux-Cgroup V2 初体验
    本文主要记录LinuxCgroupV2版本基本使用操作,包括cpu、memory子系统演示。1.开启CgroupV2版本检查通过下面这条命令来查看当前系统使用的CgroupsV1还是V2stat-fc%T/sys/fs/cgroup/如果输出是cgroup2fs那就是V2,就像这样root@tezn:~#stat-fc%T/sys/fs/......