Go语言结构体内嵌接口

前言

        在golang中,结构体内嵌结构体,接口内嵌接口都很常见,但是结构体内嵌接口很少见。它是做什么用的呢?

        当我们需要重写实现了某个接口的结构体的(该接口)的部分方法,可以使用结构体内嵌接口。

作用

  • 继承赋值给接口的结构体的方法。

        空接口:需要先断言类型,再通过变量访问方法。

        确定接口,匿名字段,内嵌方法,可以直接访问。不是匿名字段,需要通过变量名访问。

  •  重写继承结构体的方法

​​​​​​​        条件:

  1. 接口需要是匿名字段,嵌入方法。
  2. 重写接口方法。

        空接口:赋值接口体的方法不能重写,因为空接口一开始不能确定类型,并且不能定义为匿名字段。

        确定接口:

        假设现在有一个需求,重写Cat的Walk方法,并且Speak方法保持不变。

        当然我们可以重新创建一个结构体,实现接口中所以的方法来实现。但是如果这个接口又很多方法,全部实现一遍就有点小题大做了,而且我们只是需要重写部分方法,其它方法保持不变。

        这个时候我们可以通过结构体内嵌接口来实现。

        新增一个JiaFeiCat结构体,初始化时将Cat类型的变量传入,JiaFeiCat结构体定义一个Walk方法,这个方法会覆盖Cat的同名方法,从而实现了Walk方法的重写。

总结

结构体内嵌接口的作用:

  • 不依赖具体实现:即接口为A,结构体B1、B2实现了接口A,结构体C内嵌了A,那么C.A可以通过B1/B2实例化;
  • 对接口类型进行重写:当C.A通过B1实例化后,C和B1的关系,可以转变为结构体C内嵌结构体B1,那么C可以直接使用B1中的所有方法,当然C也可以对B1中的方法进行重写,这里官方文档这样解释“Interface and we can override a specific method without having to define all the others.”

 参考:

golang接口用法之:结构体内嵌匿名接口_golang 匿名接口-CSDN博客

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

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

相关文章

信号与系统实验MATLAB-实验1-信号的MATLAB表示及信号运算

实验1-信号的MATLAB表示及信号运算 一、实验目的 1、掌握MATLAB的使用; 2、掌握MATLAB生成信号波形; 3、掌握MATLAB分析常用连续信号; 4、掌握信号运算的MATLAB实现。 二、实验内容 编写程序实现下列常用函数,并显示波形。…

PyTorch -- Visdom 快速实践

安装:pip install visdom 注:如果安装后启动报错可能是 visdom 版本选择问题 启动:python -m visdom.server 之后打开出现的链接 http://localhost:8097Checking for scripts. Its Alive! INFO:root:Application Started INFO:root:Working…

数据网格和视图入门

WinForms数据网格(GridControl类)是一个数据感知控件,可以以各种格式(视图)显示数据。本主题包含以下部分,这些部分将指导您如何使用网格控件及其视图和列(字段)。 Grid Control’s…

BUUCTF-Web题目1

目录 [HCTF 2018]admin 1、题目 2、知识点 3、思路 [极客大挑战 2019]BuyFlag 1、题目 2、知识点 3、思路 [HCTF 2018]admin 1、题目 2、知识点 BP暴力破解密码 3、思路 打开题目,查看页面源代码,发现需要admin用户才可以登录 这一台有很多解法…

redis清空list

redis list清空 要清空Redis中的list,您可以使用LTRIM命令。Redis Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 下标 0 表示列表的第一个元素,以 1 表示…

LeetCode | 20.有效的括号

这道题就是栈这种数据结构的应用,当我们遇到左括号的时候,比如{,(,[,就压栈,当遇到右括号的时候,比如},),],就把栈顶元素弹出,如果不匹配,则返回False,当遍历完所有元素后…

实体店如何通过私域获取流量?

随着互联网的快速发展和消费者购物习惯的变化,私域流量对于实体店的重要性日益凸显。私域流量是指企业在自己的平台上沉淀的、可以免费使用、多次利用的流量,如微信生态下的朋友圈、公众号、企业微信等。对于实体店而言,有效利用私域流量不仅…

K8s 卷快照类

卷快照类 卷快照类 这个警告信息通常出现在使用 kubectl 删除 Kubernetes 集群资源时,如果尝试删除的是集群作用域(cluster-scoped)的资源,但指定了命名空间(namespace),就会出现这个警告。 集…

基于PointNet / PointNet++深度学习模型的激光点云语义分割

一、场景要素语义分割部分的文献阅读笔记 1.1 PointNet PointNet网络模型开创性地实现了直接将点云数据作为输入的高效深度学习方法(端到端学习)。最大池化层、全局信息聚合结构以及联合对齐结构是该网络模型的三大关键模块,最大池化层解决了…

72、AndroidStudio 导入项目Connect timed out错误解决

一、背景: 开发过程中难免会 clone 其他的项目,clone 或者下载成功之后。使用 android studio 打开项目时经常遇到 Connect timed out错误如图所示: 二、分析原因: 1、既然链接超时,肯定是 android studio 在运行…

包装类的应用

一.什么是包装类 基本数据类型所对应的引用数据类型 二.集合中不能存储基本数据类型 三.JDK5以后对包装类新增了什么特性? // 自动装箱:把基本数据类型会自动的变成对应的包装类 // 自动拆箱:把包装类自动的变成其对象的基本数据类型 四.我们以后如何获取包…

02-MybatisPlus批量插入性能够吗?

1 前言 “不要用 mybatis-plus 的批量插入,它其实也是遍历插入,性能很差的”。真的吗?他们的立场如下: 遍历插入,反复创建。这是一个重量级操作,所以性能差。这里不用看源码也知道,因为这个和…

【WPF】中的ListBox的ScrollIntoView方法使用

在WPF中,ListBox控件的ScrollIntoView方法用于确保指定的项在可视区域内可见。如果该项不在当前的视图中,该方法会滚动列表,使该项出现在视图中。这对于在用户交互或程序逻辑中需要突出显示特定列表项的场景非常有用。但是不会指定滚动的对齐…

数据结构:手撕代码——顺序表

目录 1.线性表 2.顺序表 2.1顺序表的概念 2.2动态顺序表实现 2.2-1 动态顺序表实现思路 2.2-2 动态顺序表的初始化 2.2-3动态顺序表的插入 检查空间 尾插 头插 中间插入 2.2-4 动态顺序表的删除 尾删 头删 中间删除 2.2. 5 动态顺序表查找与打印、销毁 查找 …

mysql导入sql文件失败及解决措施

1.报错找不到表 1.1 原因 表格创建失败,编码问题mysql8相较于mysql5出现了新的编码集 1.2解决办法: 使用vscode打开sql文件ctrlh,批量替换,替换到你所安装mysql支持的编码集。 2.timestmp没有设置默认值 Error occured at:20…

一个公用的数据状态修改组件

灵感来自于一项重复的工作,下图中,这类禁用启用、审核通过不通过、设计成是什么状态否什么状态的场景很多。每一个都需要单独提供接口。重复工作还蛮大的。于是,基于该组件类捕获组件跳转写了这款通用接口。省时省力。 代码如下:…

Git教程II

介绍一些学习工作中会使用到的git指令。 从远程得到一个指定分支 在clone之后,一般来说本地只会有一个main分支。如果想要获得dev分支该怎么办呢?假设远程的名字是origin,那么可以用git checkout -b dev origin/dev在本地增加dev分支并直接…

Linux开机自启/etc/init.d和/etc/rc.d/rc.local

文章目录 /etc/init.d和/etc/rc.d/rc.local的区别/etc/init.dsystemd介绍 /etc/init.d和/etc/rc.d/rc.local的区别 目的不同: /etc/rc.d/rc.local:用于在系统启动后执行用户自定义命令,适合简单的启动任务。 /etc/init.d:用于管理…

20240611 讯飞JAVA工程师(研发经理岗)面试

1.线程安全的集合类 在Java中,一些线程安全的集合类有Stack、Vector、Properties、Hashtable等 2.线程池中execute和submit的区别 1)参数及返回值不同 excute只能提交Runnable,无返回值 submit既可以提交Runnable,返回值为null&am…

浅谈2024年,计算机相关专业前景

当然,对于计算机相关专业在2024年及未来的发展趋势,我们可以进一步细化分析和归纳: 一、计算机相关专业的就业前景 广泛的应用领域:计算机科学与技术、人工智能、网络安全、软件工程等专业具有广泛的应用领域,包括但…