Go 接口

第 2 章  接口

2.1 什么是接口

接口的概念

2.2 声明接口

2.2.1 声明单个接口

声明接口的基本格式:

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

(i). Go语言的接口在命名时,一般以 er 结尾

     如有写操作的接口叫 Writer,有关闭操作的接口叫 Closer

(ii). 接口名最好要能突出该接口的类型含义

方法名

当方法名首字母是大写且这个接口类型名首字母也是大写时,

这个方法可以被接口所在的包(package)之外的代码访问(导出的)

参数列表

返回值列表

参数列表和返回值列表中的参数变量名可以省略

示例:定义一个包含 Write 方法的 Writer 接口

type Writer interface {
    Write([]byte) error
}
2.2.2 组合多个接口

  定义基本接口类型:

type Writer interface {
    // 函数功能 :Write 从 p 向底层数据流写入 len(p) 个字节的数据
    // 返回值 n :返回实际写入的字节数( 0 <= n <= len(p) )
    // 返回值 err :如果没有写完,那么会返回写入过程中遇到的错误
    // 在 Write 返回 n < len(p) 时,err 必须为非 nil
    // Write 不允许修改 p 的数据,即使是临时修改
    // 
    // 实现时不允许残留 p 的引用
    Write(p []byte) (n int, err error)
}

type Reader interface {
    Read(p []byte) (n int, err error)
}

type Closer interface {
    Close() error
}

1. 包含已有接口类型,声明新接口
type ReadWriter intreface {
    Reader
    Writer
}

type ReadWriteCloser {
    Reader
    Writer
    Closer
}
2. 包含已有接口方法,声明新接口
type ReadWriter interface {
    Read(p []byte) (n int, err error)
    Write(p []byte) (n int, err error)
}
3. 混用两种方式,同时包含已有类型和已有类型的方法
type ReadWriter interface {
    Read(p []byte) (n int, err error)
    Writer
}
说明

(i).   三种声明的效果是相同的

(ii).  方法定义的顺序也可以是任意的

(iii). 真正有意义的只是接口的方法集合

2.2.3 空接口

22

2.3 实现接口

2.4 使用接口

2.4.1 接口值

你可能感兴趣的:(后端编程语言,golang)