go语言学习笔记 — 进阶 — 接口:接口的嵌套组合 —— 把多个接口放到一个接口内
Posted Locutus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 进阶 — 接口:接口的嵌套组合 —— 把多个接口放到一个接口内相关的知识,希望对你有一定的参考价值。
在go中,结构体可以内嵌,创建出新的结构体;同理,接口也可以内嵌,创建出新的接口。接口与接口嵌套组合生成新接口,只要接口的所有方法都被实现,则这个接口中的所有嵌套接口均可被调用。
系统包中的接口嵌套组合
io包定义了写入器(Writer)、关闭器(Closer)和写入关闭器(WriteCloser)3个接口,代码如下:
// 写入接口
type Writer interface {
Write(p []byte)
}
// 关闭接口,实现内存资源的释放
type Closer interface {
Close() error
}
// 写入关闭接口,同时拥有Writer和Closer的特性
type WriteCloser interface {
Writer // 由两个接口嵌套组合,生成扩展接口
Closer
}
在应用代码中使用接口嵌套组合
package main
import (
"io"
"testing"
)
// // io包中的写入接口
// type Writer interface {
// Write(p []byte)
// }
// // io包中的关闭接口,实现内存资源的释放
// type Closer interface {
// Close() error
// }
// // io包中的写入关闭接口,同时拥有Writer和Closer的特性
// type WriteCloser interface {
// Writer // 由两个接口嵌套组合,生成扩展接口
// Closer
// }
// 声明一个设备结构体,用于模拟一个虚拟设备
type device struct{}
// 向结构体绑定类似io.Writer的Write方法
func (d *device) Write(p []byte) (n int, err error) {
return 0, nil
}
// 向结构体绑定类似io.Closer的Close方法
func (d *device) Close() error {
return nil
}
func main() {
// device结构体实例化wc,由于device类型已经实现了io.WriteCloser的所有内嵌接口,因此wc的类型可以看作是io.WriteCloser接口类型(被隐式转换了)
var wc io.WriteCloser = new(device)
// wc实例调用Write方法,写入数据
wc.Write(nil)
// wc实例调用Close方法,关闭设备
wc.Close()
// 声明写入器writeOnly,类型是io.Writer,并赋值device新实例
var writeOnly io.Writer = new(device)
// writeOnly实例只调用Write方法,写入数据
writeOnly.Write(nil)
}
给io.WriterCloser和io.Writer更换不同的实现者(结构体方法),可以动态地切换实现代码。
以上是关于go语言学习笔记 — 进阶 — 接口:接口的嵌套组合 —— 把多个接口放到一个接口内的主要内容,如果未能解决你的问题,请参考以下文章
go语言学习笔记 — 进阶 — 接口(2.3):接口无法实现的例子
go语言学习笔记 — 进阶 — 接口:使用类型分支,批量判断空接口中变量的类型
go语言学习笔记 — 进阶 — 接口:空接口类型interface{} —— 能保存所有值