Go的接口

严格来说,Go的interface类型是一组需要被其他数据类型实现的函数方法的集合。对于需要满足接口的数据类型,它需要实现接口所需的所有方法。简单地说,接口是定义了一组需要被实现的函数方法的抽象类型,实现接口的数据类型可以视为接口的实例。如果满足以上情况,我们说数据类型实现了这个接口。因此,一个接口包含两部分:一组接口方法和一个接口类型,这样就可以定义其它数据类型的行为。

使用接口的最大优势,就是在定义函数时使用接口作为参数,那么在调用函数时,任何实现该接口类型的变量都可以作为函数的参数被传递。接口可以作为抽象类型的能力,是其最实际的价值。

如果发现在同一个Go包中定义了一个接口及其实现,那么可能使用了错误的接口实现方式!

两个非常常见的Go接口是io.Readerio.Writer,用于文件输入和输出操作。具体来说,io.Reader用于读取文件,而io.Writer用于写入文件。

在代码https://golang.org/src/io/io.go中,io.Reader的定义如下:

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

为了使类型满足io.Reader接口,需要实现接口中描述的Read()方法。

同样,在代码https://golang.org/src/io/io.go中的io.Writer的定义如下:

type Writer interface {
    Write(p []byte) (n int, err error)
}

为满足io.Writer接口,只需要实现一个名为Write()的方法。

尽管每个io.Readerio.Writer接口都只需要实现一个方法,但是这两个接口功能都非常强大。他们功能的强大都源于他们的简单!一般来说,接口应该尽可能简单。

在下一章节中,将讲解如何定义一个接口,以及如何在其他Go包中使用。需要注意的是一个接口只要做想要实现的事情,不需要过于花哨或令人印象深刻。

简单地说,当需要一个Go元素确保满足某些条件或者达到某些预期行为时,应该使用接口。

results matching ""

    No results matching ""