Golang 接口(interface) 简介和入门使用
Golang 接口(interface) 简介和入门使用
如果在 公众号 文章发现状态为 已更新, 建议点击 查看原文 查看最新内容。
状态: 未更新
原文链接: https://typonotes.com/posts/2023/02/28/devopscamp-interface-sample/
上下文 interface
应该是 Go语言 中一个极其重要的 基石 概念了。
这里有一篇 Go 语言设计与实现 - 接口 interface , 是目前我学习的资料中 完成度 和 友善度 都很高的一篇文章。
在 go v1.18
中, interface
有了一个别名 any
。 所以在说 interface 和 any 的时候, 其实说的是相同的东西。
interface
的使用场景到处都是。 还记得我们之前说的 JSON
和 YAML
的配置文件处理吗?
|
|
看完文章, 你至少应该知道
- 什么是 鸭式对象 ?
- 怎么使用 接口断言 ?
鸭式对象
先来说说 鸭式对象: 叫的像鸭子, 走路像鸭子, 那它就是鸭子。
- 我们对鸭子下一个定义, 1. 发出嘎嘎的叫声, 2. 走路一摇一摆, 然后规定 任何满足这两个条件的 都是鸭子
- 我们拿着定义去对比。
- 有一个 人 是演员, 他能模仿鸭子发出嘎嘎声, 也能模仿鸭子一摇一摆的走路。 那么, 这个人能被认为是鸭子。
- 有一个 玩具 , 能发出嘎嘎声, 也能一摇一摆的就走。 那么, 这个玩具也能被认为是鸭子。
简单的说, 接口就是 白名单定义, 满足白名单要求就行。
在上面描述中, 已经提到了接口的两个重要概念: 定义 与 实现。
(1) 叫做 接口定义
|
|
(2) 叫做 接口实现
|
|
通过案例讲解
我们知道, 人和大熊猫都是哺乳动物
- 他们都会 吃 (Eat) 吃东西, 区别是 人吃饭, 熊猫吃竹子
- 更大的不同是, 人会 读书 (Read), 熊猫不会。
|
|
接口定义
我们回到作业要求, 要求实现 动物 和 人 两种接口。 要求
- 动物接口需要实现 吃 这个动作。
|
|
- 人接口 除了需要吃之外 , 还需要 读书 这个动作。
|
|
这种 直接为人定义两种方法 的方式是可以的, 但是当以后我们要扩展动物接口, 添加 Walk
的时候, 也必须要为人添加 Walk
才行。 久而久之, 不仅难以管理, 还无法从字面值上看到人和动物的关系。
那有没有更简单的方式呢? 有! 接口嵌套, Go 语言中没有继承概念。
|
|
接口实现
我们定两个 struct, 分别是 Panda 和 Child
|
|
这样, 小孩和熊猫的结构对象就定义好了, 他们实现了各自的方法。 并且满足之前人和动物的接口。
接口检查
在书写代码的过程中, 要检查一个结构对象是否完全 实现了接口对应的所有方法, 避免在运行调用的时候才发现。
可以使用以下代码
|
|
这是一个 变量定义并赋值 的语句。 特殊的地方在于, 变量名使用了 下划线_
。
|
|
如此操作
- 编译器在书写的时候就会进行语法检查。
- 创建的 不存在变量 最终会被丢弃。
接口断言
在日常使用中, 我们可以通过 断言 将 接口A 转换成 接口B。
类似的, 就像问一头 熊猫 是不是 人?
|
|
断言 返回的 第二个结果(ok) 是可以省略的。 不过这种用法需要用在我们能 保证 转换一定成功的情况下。
|
|
在这里, Human
嵌套了 Animal
方法, 所以转换一定成功。
- 原文链接:https://typonotes.com/posts/2023/02/28/devopscamp-interface-sample/
- 本文为原创文章,转载注明出处。
- 欢迎 扫码关注公众号
Go与云原生
或 订阅网站 https://typonotes.com/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。