• Go接口嵌套的使用


    原文链接: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实现一个嵌套接口的方法。

  • 相关阅读:
    Java实现 SSL双向认证
    2018-2019-2 网络对抗技术 20165336 Exp 9 Web安全基础
    2018-2019-2 网络对抗技术 20165336 Exp 8 Web基础
    2018-2019-2 网络对抗技术 20165336 Exp7 网络欺诈防范
    2018-2019-2 网络对抗技术 20165336 Exp6 信息搜集与漏洞扫描
    2018-2019-2 网络攻防技术 20165336 Exp5 MSF基础应用
    2018-2019-2 网络对抗技术 20165336 Exp4 恶意代码分析
    2018-2019-2 网络对抗技术 20165336 Exp3 免杀原理与实践
    2018-2019-2 网络对抗技术 20165336 Exp2 后门原理与实践
    2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解
  • 原文地址:https://www.cnblogs.com/phpper/p/16839375.html
Copyright © 2020-2023  润新知