接口

接口类型是对其他类型行为的概括与抽象。

接口即约定

接口是一种抽象类型,它并没有暴露所含数据布局或者内部结构,当然也没有那些数据的基本操作,它所提供的仅仅提供一些方法而已。

接口类型

一个接口类型定义了一套方法,如果一个具体类型要实现该接口,那么必须实现接口类型定义中的所有方法

接口的实现

如果一个类型实现了一个接口要求的所有方法,那么这个类型实现了这个接口。换一种说法就是说,一个具体类型”是一个“特定的接口类型,者其实就代表着该具体类型实现了该接口。

接口的值

一个接口类型的值,分为两个部分:一个具体类型和该类型的一个值。二者为接口的动态类型和动态值。

接口特点:

  1. 接口的零值就是把它的动态类型和动态值都设置为nil
  2. 一个接口值是否是nil取决于它的动态类型,可以使用value == nil或value != nil来检测一个接口值是否是nil
  3. 调用一个nil接口的任何方法都会导致奔溃
  4. 接口值可以使用==和!=操作符来做比较。如果两个接口值都是nil或者二者的动态类型完全一致且二者动态值相等,那么两个接口值相等。
类型断言

类型断言是一个作用在接口值上的操作,写出来类似与x.(T),其中x是一个接口类型的表达式,而T是一个类型(称为断言类型)。类型断言会检查作为操作数的动态类型是否满足指定的断言类型。

  1. 如果断言类型T是一个具体类型,那么类型断言会检查x的动态类型是否就是T。如果检测成功,类型断言的结果就是x的动态值,类型当然就是T。换句话说,类型断言就是用来从它的操作数中把具体类型的值提取出来的操作。
  2. 如果断言的类型T是一个接口类型,那么类型断言检查x的动态类型是否满足T。如果检测成功,动态值并没有提取出来,结果仍是一个接口值,接口值的类型和值部分也没有变更,只是结果的类型为接口类型T
类型分支
switch x.(type) {
    case nil:
    //
    case int, uint:
    //
    case bool:
    //
    case string:
    //
    default:
    ///
}

that‘s all

results matching ""

    No results matching ""