返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言接口的嵌套的具体使用
  • 249
分享到

Go语言接口的嵌套的具体使用

Go语言接口嵌套Go接口嵌套组合 2023-05-16 14:05:00 249人浏览 八月长安
摘要

目录系统包中的接口嵌套组合在代码中使用接口嵌套组合在Go语言中,不仅结构体与结构体之间可以嵌套,接口与接口间也可以通过嵌套创造出新的接口。 一个接口可以包含一个或多个其他的接口,这相

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

一个接口可以包含一个或多个其他的接口,这相当于直接将这些内嵌接口的方法列举在外层接口中一样。只要接口的所有方法被实现,则这个接口中的所有嵌套接口的方法均可以被调用。

系统包中的接口嵌套组合

Go语言的 io 包中定义了写入器(Writer)、关闭器(Closer)和写入关闭器(WriteCloser)3 个接口,代码如下:

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

代码说明如下:

  • 第 1 行定义了写入器(Writer),如这个接口较为常用,常用于 I/O 设备的数据写入。
  • 第 5 行定义了关闭器(Closer),如有非托管内存资源的对象,需要用关闭的方法来实现资源释放。
  • 第 9 行定义了写入关闭器(WriteCloser),这个接口由 Writer 和 Closer 两个接口嵌入。也就是说,WriteCloser 同时拥有了 Writer 和 Closer 的特性。

在代码中使用接口嵌套组合

在代码中使用 io.Writer、io.Closer 和 io.WriteCloser 这 3 个接口时,只需要按照接口实现的规则实现 io.Writer 接口和 io.Closer 接口即可。而 io.WriteCloser 接口在使用时,编译器会根据接口的实现者确认它们是否同时实现了 io.Writer 和 io.Closer 接口,详细实现代码如下:

package main
import (
    "io"
)
// 声明一个设备结构
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的实例
    var wc io.WriteCloser = new(device)
    // 写入数据
    wc.Write(nil)
    // 关闭设备
    wc.Close()
    // 声明写入器, 并赋予device的新实例
    var writeOnly io.Writer = new(device)
    // 写入数据
    writeOnly.Write(nil)
}

代码说明如下:

  • 第 8 行定义了 device 结构体,用来模拟一个虚拟设备,这个结构会实现前面提到的 3 种接口。
  • 第 12 行,实现了 io.Writer 的 Write() 方法。
  • 第 17 行,实现了 io.Closer 的 Close() 方法。
  • 第 24 行,对 device 实例化,由于 device 实现了 io.WriteCloser 的所有嵌入接口,因此 device 指针就会被隐式转换为 io.WriteCloser 接口。
  • 第 27 行,调用了 wc(io.WriteCloser接口)的 Write() 方法,由于 wc 被赋值 *device,因此最终会调用 device 的 Write() 方法。
  • 第 30 行,与 27 行类似,最终调用 device 的 Close() 方法。
  • 第 33 行,再次创建一个 device 的实例,writeOnly 是一个 io.Writer 接口,这个接口只有 Write() 方法。
  • 第 36 行,writeOnly 只能调用 Write() 方法,没有 Close() 方法。

为了整理思路,将上面的实现、调用关系使用图方式来展现,参见图 1 和图 2。

1) io.WriteCloser的实现及调用过程如图 1 所示。

图1:io.WriteCloser 的实现及调用过程

2) io.Writer 的实现调用过程如图 2 所示。

图2:io.Write 的实现及调用过程

给 io.WriteCloser 或 io.Writer 更换不同的实现者,可以动态地切换实现代码。

到此这篇关于Go语言接口的嵌套的具体使用的文章就介绍到这了,更多相关Go语言接口嵌套内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言接口的嵌套的具体使用

本文链接: https://lsjlt.com/news/209963.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go语言接口的嵌套的具体使用
    目录系统包中的接口嵌套组合在代码中使用接口嵌套组合在Go语言中,不仅结构体与结构体之间可以嵌套,接口与接口间也可以通过嵌套创造出新的接口。 一个接口可以包含一个或多个其他的接口,这相...
    99+
    2023-05-16
    Go语言接口嵌套 Go 接口嵌套组合
  • Go语言接口的嵌套如何使用
    这篇文章主要讲解了“Go语言接口的嵌套如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言接口的嵌套如何使用”吧!在Go语言中,不仅结构体与结构体之间可以嵌套,接口与接口间也可以通...
    99+
    2023-07-06
  • GO语言中接口和接口型函数的具体使用
    目录前言GO语言中的接口怎么用?使用函数类型实现接口有何好处?GO源码例子前言 今天在编码中,看到了一个非常经典的接口用法如下,于是查阅了相关资料,发现此种写法为接口型函数,本文对此...
    99+
    2023-03-09
    GO语言接口 GO语言接口型函数
  • Go语言类型内嵌和结构体内嵌的具体使用
    目录内嵌结构体结构内嵌特性结构体可以包含一个或多个匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型也就是字段的名字。匿名字段本身可以是一个结构体类型,即...
    99+
    2023-05-14
    Go语言类型内嵌 Go语言结构体内嵌 Go语言 类型内嵌 结构体内嵌
  • SQL嵌套查询的具体使用
    目录插入数据  select子查询(外语句先执行,内语句后执行)总结嵌套查询又称子查询,有select子查询,where子查询,from子查询...
    99+
    2023-01-28
    SQL 嵌套查询
  • SQL 嵌套查询的具体使用
    目录插入数据  select子查询(外语句先执行,内语句后执行)总结嵌套查询又称子查询,有select子查询,where子查询,from子查询,exists子查询。 插入数据&nb...
    99+
    2023-01-28
    SQL嵌套查询
  • Go 语言的 :=的具体使用
    目录1. 单变量 :=2. 多变量 :=3. 小结:=   Go 语言中 = 和 := 有什么区别1. 单变量 := Go 语言中新增了一个特殊的运算符:=,这个运算符可以使...
    99+
    2022-06-07
    GO
  • go语言中使用struct解析嵌套的json
    问题内容 无法使用 go lang 将嵌套 json 解析为结构对象 我有一个嵌套的 json 字符串,我想使用 go 语言中的结构体来解析它。 json 看起来像这样 {"actio...
    99+
    2024-02-06
    go语言
  • Python循环嵌套语言的使用
    这篇文章主要讲解了“Python循环嵌套语言的使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python循环嵌套语言的使用”吧! Python 语言允许在一个循环体里面嵌入另一...
    99+
    2023-06-04
  • golang中结构体嵌套接口的实现
    在golang中结构体A嵌套另一个结构体B见的很多,可以扩展A的能力。 A不仅拥有了B的属性,还拥有了B的方法,这里面还有一个字段提升的概念。 示例: package main i...
    99+
    2023-05-14
    golang 结构体嵌套接口 golang 嵌套接口
  • go语言中[]*int和*[]int的具体使用
    目录[]*int*[]int[]*int是一个指向指针的切片,本质上是切片,只不过切片里面存放的元素是指针;*[]int是一个指向切片的指针,本质上是指针,可以用*来获取切片; 简易...
    99+
    2023-05-16
    go语言 []*int go语言 *[]int go语言 []*int *[]int
  • Go语言中map集合的具体使用
    目录1-1 定义1-2 map遍历1-3 map集合删除1-4 map是引用类型Go 语言提供了内置类型 map集合,它将一个值与一个键关联起来,可以使用相应的键检索值。 map是一...
    99+
    2023-02-17
    Go语言map集合 Go语言map
  • Go语言中的接口怎么使用
    今天小编给大家分享一下Go语言中的接口怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。接口在 Go 语言中,接口是一种...
    99+
    2023-07-04
  • go结构体嵌套指针怎么使用
    在Go语言中,我们可以使用结构体嵌套指针来建立复杂的数据结构。下面是一个示例: package main import "...
    99+
    2024-02-29
    go
  • Go语言类型内嵌和结构体内嵌如何使用
    这篇文章主要讲解了“Go语言类型内嵌和结构体内嵌如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言类型内嵌和结构体内嵌如何使用”吧!结构体可以包含一个或多个匿名(或内嵌)字段,即...
    99+
    2023-07-05
  • Go语言中日期包(time包)的具体使用
    目录日期包常用函数定时器打印定时器终止定时器注意事项日期包 常用函数 time.Now(): 获取当前时间 package main import ( "fmt" "...
    99+
    2023-05-19
    Go 日期包 Go time
  • C语言分支循环其嵌套语句的使用
    目录switch 嵌套1、语法结构: 2、switch-case 嵌套语句程序示例 循环嵌套1、while 循环嵌套2、do-while 嵌套循环 3、for 循环嵌套 总结Hell...
    99+
    2024-04-02
  • TypeScript 接口继承的具体使用
    目录1、TypeScript 接口继承2、单继承3、多继承4、接口继承中的同名成员的兼容问题4.1、同名成员的类型必须兼容4.2、同名成员的类型必须相同5、接口继承类6、参考1、Ty...
    99+
    2024-04-02
  • R语言-实现list的嵌套与提取嵌套中的值
    R的数据结构有很多种,常用的包括向量vector,矩阵matrix,数组array,列表list和dataframe数据框。 前三个都有其特定的性质和结构 今天要介绍的是list,它...
    99+
    2024-04-02
  • Mybatis关联查询结果集对象嵌套的具体使用
    在查询时经常出现一对多”的关系,所有会出现嵌套对象的情况,Mybatis在resultMap提供了collection标签,本文适合有一定Mybatis基础的读者查阅 数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作