Go语言接口的嵌套(附带实例)
Go语言中,接口的嵌套是指在一个接口中包含一个或多个其他接口。通过接口的嵌套使得多个接口组成一个新接口,其中每个接口中的方法都是唯一的。
虽然接口的嵌套允许在不同接口中包含同名方法,但是同名方法的参数和返回值必须保持一致,否则程序在运行时会报错。这是因为程序把同名方法默认为同一个方法。
因此,在使用接口的嵌套时,建议为各个接口中的方法设置不同名称。如果在不同接口中包含同名方法,那么建议使用“接口名称_方法名称”的格式加以区分。
【实例】声明接口 reader,其中包含读书函数 read()。为少儿读者声明包含接口 reader 的嵌套接口 childReader,除了包含读书函数 read(),该接口中还包含少儿读书函数 childReader_read()。声明表示少儿的结构体,其中包含一个表示“姓名”的 string 类型字段 name。分别实现接口 reader 中的 read() 函数(打印“××××在读书……”)和接口 childReader 中的 childReader_read() 函数(打印“××××在读漫画书……”)。
在 main() 函数中,声明一个接口变量,使用键值对初始化结构体,对初始化的结构体变量执行“取地址”操作,分别调用接口 reader 中的 read() 函数和调用接口 childReader 中的 childReader_read() 函数。代码如下:
虽然接口的嵌套允许在不同接口中包含同名方法,但是同名方法的参数和返回值必须保持一致,否则程序在运行时会报错。这是因为程序把同名方法默认为同一个方法。
因此,在使用接口的嵌套时,建议为各个接口中的方法设置不同名称。如果在不同接口中包含同名方法,那么建议使用“接口名称_方法名称”的格式加以区分。
【实例】声明接口 reader,其中包含读书函数 read()。为少儿读者声明包含接口 reader 的嵌套接口 childReader,除了包含读书函数 read(),该接口中还包含少儿读书函数 childReader_read()。声明表示少儿的结构体,其中包含一个表示“姓名”的 string 类型字段 name。分别实现接口 reader 中的 read() 函数(打印“××××在读书……”)和接口 childReader 中的 childReader_read() 函数(打印“××××在读漫画书……”)。
在 main() 函数中,声明一个接口变量,使用键值对初始化结构体,对初始化的结构体变量执行“取地址”操作,分别调用接口 reader 中的 read() 函数和调用接口 childReader 中的 childReader_read() 函数。代码如下:
package main //声明 main 包 import "fmt" //导入 fmt 包,用于打印字符串 type reader interface { read() //为读者声明接口 } type childReader interface { read() //读书函数 childReader_read() //少儿读书函数 } type child struct { name string //姓名 } func (c *child) read() { //实现接口 reader 中的 read()函数 fmt.Printf("%v 在读书......\n", *c) } func (c *child) childReader_read() { //实现接口 childReader 中的 childReader_read()函数 fmt.Printf("%v 在读漫画书......\n", *c) } func main() { //声明 main()函数 var cr childReader //声明接口变量 c := child{name: "Leon"} //键值对初始化结构体 cr = &c //对初始化的结构体变量执行 “取地址” 操作 cr.read() //调用接口 reader 中的 read()函数 cr.childReader_read() //调用接口 childReader 中的 childReader_read()函数 }运行结果为:
{Leon}在读书……
{Leon}在读漫画书……