ZhouChuang's Blog ZhouChuang's Blog
首页
  • 常用命令
  • 日常总结
  • Prometheus
  • 基础
  • 常用库
专题
  • 「编码」
更多
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Zhou Chuang

为学日益 为道日损
首页
  • 常用命令
  • 日常总结
  • Prometheus
  • 基础
  • 常用库
专题
  • 「编码」
更多
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Go语言基础

    • 安装Go环境
    • 变量、常量
    • 基本数据类型
    • 操作符和流程控制
    • 数组
    • 切片 Slice
    • map
    • 函数
    • 指针
    • 结构体
    • 接口
      • 接口的优势
      • 接口类型
        • 接口的定义
        • 实现接口的条件
  • 常用库

  • 数据库相关内容

  • 技巧

  • golang
  • Go语言基础
ZhouChuang
2024-12-16
目录

接口

接口的本质是引入一个新的中间层,调用方可以通过接口与具体实现分离,解除上下游的耦合,上层的模块不再需要依赖下层的具体模块,只需要依赖一个约定好的接口。

golang-interface

除了解耦有依赖关系的上下游,接口还能够帮助我们隐藏底层实现,减少关注点。

人能够同时处理的信息非常有限,定义良好的接口能够隔离底层的实现,让我们将重点放在当前的代码片段中。SQL 就是接口的一个例子,当我们使用 SQL 语句查询数据时,其实不需要关心底层数据库的具体实现,我们只在乎 SQL 返回的结果是否符合预期。

sql-and-databases

Go语言中的接口(interface)是一种抽象的类型,它定义了一组方法的签名,但不包含这些方法的具体实现。是duck-type programming的一种体现。

Go 语言中接口的实现都是隐式的,在 Go 中:实现接口的所有方法就隐式地实现了接口;

具体类型(字符串、切片、结构体等)更注重“我是谁”,接口类型更注重“我能做什么”的问题。接口类型就像是一种约定——概括了一种类型应该具备哪些方法,在Go语言中提倡使用面向接口的编程方式实现解耦。

# 接口的优势

使用接口在编程中有很多好处,尤其是在Go语言中,接口提供了以下几个主要优势:

  1. 抽象与封装 :
    • 抽象 :接口允许你定义行为而不需要关心实现细节。这使得代码更具可读性和可维护性,因为你可以关注于“做什么”,而不是“怎么做”。
    • 封装 :通过接口,具体的实现可以被隐藏,用户只需要知道如何使用接口,而不需要了解底层的实现逻辑。
  2. 多态 :
    • 接口提供了多态性,你可以使用同一个接口引用不同类型的对象,只要这些对象实现了该接口的方法。这样,函数或方法可以接受不同的具体类型,但行为一致。
  3. 依赖倒置原则 :
    • 接口允许高层模块依赖于抽象,而不是具体实现。这减少了代码之间的耦合,使得模块更容易替换或测试。
  4. 测试 :
    • 接口使得单元测试更加简单。你可以创建模拟对象(mocks)来测试依赖于接口的代码,而不需要真实的实现。
  5. 代码复用、类型安全、灵活性、简化API设计、促进松耦合......

# 接口类型

接口是一种由程序员来定义的类型,一个接口类型就是一组方法的集合,它规定了需要实现的所有方法。

# 接口的定义

每个接口类型由任意个方法签名组成,接口的定义格式如下:

type 接口类型名 interface {
    方法名1(参数列表1)返回值列表1
    方法名2(参数列表2)返回值列表2
    ...
}
1
2
3
4
5

其中:

  • 接口类型名:Go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有关闭操作的接口叫closer等。接口名最好要能突出该接口的类型含义。
  • 方法名:当方法名首字母是大写且这个接口类型名首字母也是大写时,这个方法可以被接口所在的包(package)之外的代码访问。
  • 参数列表、返回值列表:参数列表和返回值列表中的参数变量名可以省略。

# 实现接口的条件

接口就是规定了一个需要实现的方法列表,在 Go 语言中一个类型只要实现了接口中规定的所有方法,那么我们就称它实现了这个接口。

... 未完待续

本文参考

Go语言设计与实现 (opens new window)

#类型系统#接口
上次更新: 2025/05/06, 13:52:56
结构体
命令行工具 flag

← 结构体 命令行工具 flag→

最近更新
01
find 命令介绍
05-06
02
交换分区的配置
04-09
03
top 命令介绍
04-08
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Zhou Chuang 版权所有| 鲁ICP备2021031629号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式