首页 > 其他分享 >Go接口嵌套的使用

Go接口嵌套的使用

时间:2022-10-29 18:47:59浏览次数:78  
标签:Writer 接口 嵌套 Reader Go Studenter type

原文链接:https://www.zhoubotong.site/post/86.html
这里介绍下接口interface嵌套的用法,大家知道Go语言中不仅仅结构体与结构体之间可以嵌套,接口与接口之间也可以嵌套,通过接口的嵌套我们可以定义出新的接口。

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

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

Go语言接口嵌套

语法

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

说明

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

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

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

例子

接口嵌套

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

package main

import (
    "fmt"
)

type Studenter struct { // 该Studenter结构体用来演示 如何实现接口的所有的方法
}
type Reader interface {
    ReaderFunc()
}
type Writer interface {
    WriterFunc(str string)
}
type ReadAndWriter interface { // 嵌套结构体
    Reader
    Writer
}

func (s Studenter) ReaderFunc() {
    fmt.Println("调用ReaderFunc")
}
func (s Studenter) WriterFunc(str string) {
    fmt.Println("调用 WriterFunc Str =", str)
}
func main() {
    fmt.Println("草堂笔记(www.zhoubotong.site)")
    // 必须实现嵌套的接口的所有方法,才算实现接口
    var s interface{}              // 定义接口类型变量s
    var student Studenter          // 定义 Studenter 结构体类型的变量 student
    s = student                    // 将 Studenter 赋值给了变量 s
    student.ReaderFunc()           // 调用ReaderFunc方法
    student.WriterFunc("这里是一段写函数") // 调用WriterFunc方法
    // 下面使用 接口类型断言,分别判断变量 s 是否是接口 Reader 、Writer 和 ReadAndWriter 类型
    if reader, Ok := s.(Reader); Ok { // s 转换成Reader 接口
        fmt.Println("Studenter is type of Reader, Reader =", reader)
    }
    if writer, Ok := s.(Writer); Ok { // s 转换成Writer 接口
        fmt.Println("Studenter is type of Reader, Writer =", writer)
    }
    if readAndWriter, Ok := s.(ReadAndWriter); Ok {
        fmt.Println("Studenter is type of Reader, ReadWriter =", readAndWriter)
    }
}

输出:

草堂笔记(www.zhoubotong.site)
调用ReaderFunc
调用 WriterFunc Str = 这里是一段写函数
Studenter is type of Reader, Reader = {}
Studenter is type of Reader, Writer = {}
Studenter is type of Reader, ReadWriter = {}

上面student同时实现了接口中的Reader和Writer方法,我们发现变量 s 同时是 Reader 、Writer 和 ReadAndWriter 类型,即结构体 Studenter 同时实现了以上三个接口,

其实这个例子就是用一个struct实现一个嵌套接口的方法。

标签:Writer,接口,嵌套,Reader,Go,Studenter,type
From: https://www.cnblogs.com/phpper/p/16839375.html

相关文章

  • Qt应用程序接口和插件的创建详细过程
    Qt应用程序接口:包含类定义的头文件(*.h),该类定义中一般只包含纯虚函数的声明。Qt应用程序插件:继承自指定类和接口的C++类,该类实现了接口中定义的纯虚函数。 ------------......
  • 引力搜索算法(Gravitational_Search_algorithm,GSA)附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。......
  • 三、Go环境安装
    3.1、Go编译器的下载 官网:https://golang.google.cn/go中文网:https://studygolang.com/dl3.2、安装forMac3.2.1、mac系统下安装SDK安装完成以后可以使用终......
  • Matlab实现二维Goldstein分支切割相位展开算法
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。......
  • .NET API 接口数据传输加密最佳实践
    .NETAPI接口数据传输加密最佳实践我们在做Api接口时,相信一定会有接触到要给传输的请求body的内容进行加密传输。其目的就是为了防止一些敏感的内容直接被UI层查看......
  • ubuntu docker 安装指定版本 MongoDB 并配置用户密码
    ubuntudocker安装指定版本MongoDB并配置用户密码​​初​​​​查看安装的镜像​​​​运行容器​​​​检查运行​​​​进入数据库​​​​创建用户和密码​​​​创......
  • node.js:《接口实现文件的上传和下载》
    使用node.js写上传文件和下载文件的接口上传接口:开始写接口前,我们先安装一个上传文件的插件:npminstallmulter安装成功在package.json或package-lock.json包中能看到......
  • 函数的嵌套
    函数的嵌套函数是可以互相嵌套的functionfn(){functionfn1(){console.log('hello')//fn(3)//报错}functionfn2(){consol......
  • node.js:《路由—接口分类》
     一个项目有很多不同的接口,如果把它们都写在同个js文件中,报错或需要改会很麻烦!我们可以将接口按我们想要的规则分类出来写在路由文件中,再借助中间件用拼接的方式,将在路......
  • golang学习之路1-环境安装及Helloword
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档@目录Golang学习之路前言一、安装环境1.Golang安装2.GoLand安装二、第一个go程序HelloWord三、go命令......