Go语言接口嵌套

Go语言接口嵌套教程

Go 语言 中不仅仅 结构体 与结构体之间可以嵌套,接口 与接口之间也可以嵌套,通过接口的嵌套我们可以定义出新的接口。

Golang 的接口嵌套,也就是一个接口里面包含一个或多个其他的接口,被包含的接口的所有方法都会被包含到新的接口中。

只有实现接口中所有的方法,包括被包含的接口的方法,才算是实现了接口。

Go语言接口嵌套

语法

type Interface1 interface{ func1() } type Interface2 interface{ func2() } type Interface interface{ Interface1 Interface2 func3() }

说明

我们定义了一个接口 Interface1 和一个接口 Interface2,接口 Interface1 里面由一个方法 func1,接口 Interface12 里面有一个函数 func2。

接着,我们定义了接口 Interface,接口 Interface 里面包含了接口 Interface1 和接口 Interface2,同时,包含了方法 func3。

此时,接口 Interface 相当于包含了方法 func1、func2 和 func3,因此,我们必须实现 func1、func2 和 func3 这三个方法才算实现了接口 Interface。

案例

接口嵌套

必须实现嵌套的接口的所有方法,才算实现接口

package main import ( "fmt" ) type SReadWriter struct{ } type MyReader interface { ReaderFunc() } type MyWriter interface { WriterFunc(str string) } type MyReadWriter interface { MyReader MyWriter } func (m SReadWriter)ReaderFunc(){ fmt.Println("Call ReaderFunc") } func (m SReadWriter)WriterFunc(str string){ fmt.Println("Call WriterFunc Str =", str) } func main() { fmt.Println("嗨客网(www.haicoder.net)") // 必须实现嵌套的接口的所有方法,才算实现接口 var s interface{} var readWriter SReadWriter s = readWriter readWriter.ReaderFunc() readWriter.WriterFunc("Hello HaiCoder") if reader, isOk := s.(MyReader); isOk{ fmt.Println("SReadWriter is type of MyReader, Reader =", reader) } if writer, isOk := s.(MyWriter); isOk{ fmt.Println("SReadWriter is type of MyReader, Writer =", writer) } if readWriter, isOk := s.(MyReadWriter); isOk{ fmt.Println("SReadWriter is type of MyReader, ReadWriter =", readWriter) } }

程序运行后,控制台输出如下:

16_golang接口嵌套.png

首先,我们定义了一个 SReadWriter 结构体,一个 MyReader 接口,一个 MyWriter 接口和一个 MyReadWriter 接口。

接口 MyReader 包含方法 ReaderFunc,接口 MyWriter 包含方法 WriterFunc,接口 MyReadWriter 包含了接口 MyReader 和 MyWriter 。

在 main 函数 中,我们定义了一个接口 类型变量 s 和一个 SReadWriter 结构体类型的变量 readWriter,并且将 readWriter 赋值给了变量 s。

接口,我们调用,SReadWriter 结构体的 ReaderFunc 和 WriterFunc 方法,同时,我们使用 接口类型断言,分别判断变量 s 是否是接口 MyReader 、MyWriter 和 MyReadWriter 类型。

最后,我们发现变量 s 同时是 MyReader 、MyWriter 和 MyReadWriter 类型,即结构体 SReadWriter 同时实现了以上三个接口。

Golang接口嵌套总结

在 Go 语言中接口与接口之间也可以嵌套,通过接口的嵌套我们可以定义出新的接口。只有实现接口中所有的方法,包括被包含的接口的方法,才算是实现了接口。