Golang中接口类型详解与最佳实践(二)

news/2024/10/30 23:17:42/

之前的文章《Golang中的interface(接口)详解与最佳实践》详细介绍了接口类型的定义、使用方法和最佳实践。接口类型使得编写可扩展、可维护和可复用的高质量代码变得更加容易。

如何判断是否实现了某个接口?

还是使用之前文章的例子,例如声明了如下一个接口MyInterface:

type MyInterface interface {Method1()Method2() int
}

这个接口定义了两个方法Method1和Method2。

对于任何类型数据,只要它的方法中包含Method1和Method2并且形参和返回值也与Method1和Method一致,那么它就实现了MyInterface接口。这是一种无侵入式的接口实现方式,这种方式也叫做duck typing(在程序设计中,duck typing(鸭子类型)是动态类型的一种风格,即一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定)。当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。

可以看出某个类型数据是否是某个接口的实现需要满足如下条件:这个类型数据的方法中包含了接口定义的全部方法并且形参和返回值一致。

接口嵌套

接口嵌套,也称为接口组合,只要把一个接口的名称直接写到另一个接口的成员列表中就可以了,例如:

type MyInterface interface {Method1()Method2() int
}type MyInterface2 interface {MyInterfaceMethod3() string
}

接口MyInterface2包含了两个成员,一个是MyInterface类型的,一个是Method3方法。此时,MyInterface2也包含了Method1和Method2方法。

Golang官方推荐定义小粒度的接口,因为小粒度的接口只负责表达某类特征,通过灵活组合可以实现更强大的功能。Golang很多标准库中都采用了这种思路,例如io库中,看如下代码片段:

// ReadWriter is the interface that groups the basic Read and Write methods.
type ReadWriter interface {ReaderWriter
}// ReadCloser is the interface that groups the basic Read and Close methods.
type ReadCloser interface {ReaderCloser
}

其中ReadWriter接口由Reader和Writer接口组合而成,ReadCloser接口由Reader和Closer接口组合而成。


http://www.ppmy.cn/news/60356.html

相关文章

JS基础知识

1.延迟加载JS 在script标签上添加async或者defer <script defer type"text/javascript" src"script.js"></script> defer:等html全都解析完成&#xff0c;顺次执行js脚本 async:js谁先加载完谁先运行 2.JS数据类型有哪些&#xff1f; 基本数…

建筑专业可以转行学云计算吗?

当然可行。 在过去的几年中&#xff0c;我们已经帮助很多建筑土木工程专业的同学转行学习云计算技术&#xff0c;尤其是在建筑信息化编程方向。近年来&#xff0c;云计算行业持续发展&#xff0c;涉及到众多领域&#xff0c;如云数据中心、云安全、云存储、云计算机服务等。云…

HID Relay, 有线键盘转蓝牙项目学习:记一次失败的尝试

HID Relay, 有线键盘转蓝牙项目学习&#xff1a;记一次失败的尝试 开始学习嵌入式后&#xff0c;最难受的一个点在于电脑端口不够。我的电脑有两个USB口一个TypeC口&#xff0c;鼠标和键盘都要插USB口&#xff0c;stm32和51也都要插USB口。 那么烧录的时候&#xff0c;要么就…

华为OD机试 - 匿名信(Python)

题目描述 电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字减下来,剪拼成匿名信。 现在又一名举报人,希望借鉴这种手段,使用英文报刊完成举报操作。 但为了增加文章的混淆度,只需满足每个单词中字母数量一致即可,不关注每个…

vue生命周期代码示范--Vue基本介绍--MVVM-示意图--数据渲染--事件绑定--修饰符--组件化--和全部代码示范

目录 Vue 基本介绍 官网 git 地址: MVVM-示意图 解读 MVVM 思想(上图) 下载官网 简单的代码示例方便理解 Vue 数据绑定机制分析! 注意事项和使用细节 数据单向渲染 基本说明 应用实例 注意事项和使用细节 数据双向绑定 应用实例 ​编辑代码实现 代码综合-单…

辨析 关键路径、关键链、缩短工期方法

关键路径、关键链辨析、缩短工期方法 关键路径法 关键路径是从起点到终点的最长路径 关键路径上活动的总浮动时间和自由浮动时间为0 关键链法 根据有限的资源对项目进度进行调整&#xff0c;结合了确定性和随机性办法 添加了持续时间缓冲&#xff08;非计划工作活动&#xff0…

Spark学习笔记【shuffle】

本文基本上是大数据处理框架Apache Spark设计与实现的Shuffle部分的学习。以及Spark基础知识Bambrow Shuffle解决啥问题 上游和下游&#xff0c;不同stage&#xff0c;不同的task之间是如何传递数据的。ShuffleManager管理ShuffleWrite和ShuffleRead 分为两个阶段&#xff1…

互联网陪诊系统功能方案

互联网陪诊系统是一款为用户提供陪同患者到医院就医全程陪同&#xff0c;排队约号&#xff0c;排队检查&#xff0c;排队缴费&#xff0c;取送结果&#xff0c;代办买药&#xff0c;代办问诊等。 业务线上预约平台&#xff0c;让客户享受到最为专业的医院助医服务. 功能介绍 专…