首页 > 编程笔记 > Go语言笔记 阅读:1

Go语言接口的嵌套(附带实例)

Go语言中,接口的嵌套是指在一个接口中包含一个或多个其他接口。通过接口的嵌套使得多个接口组成一个新接口,其中每个接口中的方法都是唯一的。

虽然接口的嵌套允许在不同接口中包含同名方法,但是同名方法的参数和返回值必须保持一致,否则程序在运行时会报错。这是因为程序把同名方法默认为同一个方法。

因此,在使用接口的嵌套时,建议为各个接口中的方法设置不同名称。如果在不同接口中包含同名方法,那么建议使用“接口名称_方法名称”的格式加以区分。

【实例】声明接口 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}在读漫画书……

相关文章