• 1.28 Go之接口的嵌套组合


    1.28 Go之接口的嵌套组合

    接口嵌套组合的特点

    • 一个接口可以包含一个或者多个其他的接口

    • 只要接口的所有方法被实现,则这个接口中的所有嵌套接口的方法均可以被调用

    系统包中的接口嵌套组合

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

    type Closer interface {
       Close() error
    }

    /*
    定义了写入关闭器(WriteCloser),这个接口由 Writer 和 Closer 两个接口嵌入。
    同时拥有了 Writer 和 Closer 的特性
    */
    type WriteCloser interface {
       Writer
       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实例赋值给io.WriteCloser关闭器
       /*
       对 device 实例化,由于 device 实现了 io.WriteCloser 的所有嵌入接口,因此 device 指针就会被隐式转换为 io.WriteCloser 接口。
       */
       var wc io.WriteCloser = new(device)

       // 写入数据
       /*
       调用了 wc(io.WriteCloser接口)的 Write() 方法,由于 wc 被赋值 *device,因此最终会调用 device 的 Write() 方法。
       */
       wc.Write(nil)

       // 关闭
       wc.Close()

       // 声明写入器
       var writeOnly io.Writer = new(device)

       // 写入数据
       writeOnly.Write(nil)
    }
    io.WriteCloser的实现及调用过程

    io.Writer 的实现调用过程

     

  • 相关阅读:
    ref out param 区别
    SQL语句执行顺序以及oracle基本查询优化
    Ext.LoadMask遮罩的效果几种实现方式
    用ajax技术实现无闪烁定时刷新页面
    ExtJs 实现动态列,动态多表头 在这里添加日志标题
    Ajax中文乱码问题解决方法(服务器端用servlet)
    订购国际机票的常用指令
    ETERM航班销售控制指令
    线程wait()和sleep()的区别
    JSt中对象的prototype属性
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15944286.html
Copyright © 2020-2023  润新知