Emove

  • 首页
  • 归档
  • 分类
  • 标签

  • 搜索
context 反射 channel LRU BeanDefinition JVM 装饰者模式 MyBatis 快慢指针 归并排序 链表 hash表 栈 回溯 贪心 主从复制 二分查找 双指针 动态规划 AOF RDB 规范 BASE理论 CAP B树 RocketMQ Sentinel Ribbon Eureka 命令模式 访问者模式 迭代器模式 中介者模式 备忘录模式 解释器模式 状态模式 策略模式 职责链模式 模板方法模式 代理模式 享元模式 桥接模式 外观模式 组合模式 适配器模式 建造者模式 原型模式 工场模式 单例 UML 锁 事务 sql 索引

interface

发表于 2020-10-16 | 分类于 Go | 0 | 阅读次数 54

接口

接口(interface)定义了一个对象的行为规范,之定义规范不实现,由具体的对象来实现规范的细节

1、接口类型

在Go中,接口(interface)是一种类型,一种抽象的类型。
interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则)。

2、接口的定义

  1. 接口是一个或多个方法签名的集合
  2. 任何类型的方法集合中只有拥有该接口“对应的全部方法”签名,就表示它“实现”了该接口,无须在该类型上显式声明实现了哪个接口。这称为(structural Typing)
  3. 接口只有方法声明,没有实现,没有数据字段
  4. 接口可以匿名嵌入其他接口,或嵌入到结构中
  5. 对象赋值给接口时,会发生拷贝,而接口内部存储的是指向这个复制品的指针,既无法修改复制品的状态,也无法获取指针
  6. 只有当接口存储的类型和对象都为nil时,接口才等于nil
  7. 接口调用不会做receiver的自动转换
  8. 接口同样支持匿名字段方法
  9. 接口也可以实现类型OOP中的多态
  10. 空接口可以作为任何类型数据的容器
  11. 一个类型可实现多个接口
  12. 接口命名习惯以er结尾

每个接口由数个方法组成,接口的定义格式如下:

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

其中:

  1. 接口名:使用type将接口定义为自定义的类型名。Go语言中的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有字符串功能的接口叫Stringer等。接口名最好要能突出该接口的类型含义
  2. 方法名:当方法名首字母时大写且这个接口类型名首字母也时大写时,这个方法可以被接口所在的包(package)之外的代码访问
  3. 参数列表,返回值列表:参数列表和返回值列表中的参数变量名可以省略

3、实现接口的条件

一个对象只要全部实现了接口中的方法,那么就实现了这个接口。换句话说,接口就是一个需要实现的方法列表

4、类型与接口的关系

一个类型可以同时实现多个接口,而接口间彼此独立,不知道对方的实现。

5、空接口

空接口是指没有定义任何方法的接口。因此任何类型都实现了空接口。
空接口类型的变量可以存储任意类型的变量。
应用:
1. 空接口作为函数的参数(使用空接口实现可以接受任意类型的函数参数)
2. 空接口作为map的值(使用空接口实现可以保存任意值的字典)
类型断言:
接口值:一个接口的值(简称接口值)是由一个具体类型和具体类型的值两部分组成的。这两部分分别称为接口的动态类型和动态值
想要判断空接口中的值的时候就可以使用类型断言,其语法格式如下:

    x.(T)

其中:

  1. x表示类型为interface{}的变量
  2. T表示断言x可能是的类型
    该语法返回两个参数,第一个参数是x转换为T类型后的变量,第二个是一个布尔值,若为true则表示断言成功,为false则表示断言失败
# context # 反射 # channel # LRU # BeanDefinition # JVM # 装饰者模式 # MyBatis # 快慢指针 # 归并排序 # 链表 # hash表 # 栈 # 回溯 # 贪心 # 主从复制 # 二分查找 # 双指针 # 动态规划 # AOF # RDB # 规范 # BASE理论 # CAP # B树 # RocketMQ # Sentinel # Ribbon # Eureka # 命令模式 # 访问者模式 # 迭代器模式 # 中介者模式 # 备忘录模式 # 解释器模式 # 状态模式 # 策略模式 # 职责链模式 # 模板方法模式 # 代理模式 # 享元模式 # 桥接模式 # 外观模式 # 组合模式 # 适配器模式 # 建造者模式 # 原型模式 # 工场模式 # 单例 # UML # 锁 # 事务 # sql # 索引
defer
new和make
  • 文章目录
  •   |  
  • 概览
林亦庭

林亦庭

less can be more

87 文章
11 分类
54 标签
RSS
Github
Creative Commons
© 2021 林亦庭
粤ICP备20029050号