• go:interface(接口)


    1. 定义

      接口定义了一组抽象方法(方法集);

      接口中不能定义变量;

    type Namer interface {
        Method1(param_list) return_type
        Method2(param_list) return_type
        ...
    }

      永远不要使用一个指针指向一个接口类型,因为它已经是一个指针

    1.1 接口名称

      1. 一般以方法名加 [e]r 后缀结尾,比如 Printer、Reader、Writer、Logger;

      2. 以 able 后缀结尾,如 Closeable、Cloneable;

      3. 以 I 开头(大写的i);

    1.2 接口方法

      一般接口中的方法比较少,0-3个;

    2. 接口类型

      go 中的接口一般有两种,一种是包含方法定义的接口,一种是不包含方法定义的空接口;

      go 语言实现时用两种结构体表示不同的接口,iface 结构体表示包含方法定义的接口,eface 结构体表示空接口;

    3. 接口实现方式

      在Java中,实现 接口时通过 implements  接口名 来显示实现接口,并在实现类中实现接口的所有方法;

      在 go 中,接口都是隐式实现的,实现类只需要实现接口中的全部方法就隐式实现了这个接口;

    3.1 接口方法的实现和调用

      接口的方法定义中没有限制方法的接收者为结构体还是结构体指针,接收者类型两者都可以,只能二选一;

      根据方法接收者类型和方法传入的参数情况,有以下几种情况:

      

      接收者类型和传入参数类型相同时编译通过理所当然,下面讨论一下两种类型不同的情况;   

      1. 当接收者类型为结构体时,传入结构体指针编译通过,指针编译通过是因为指针通过解引用可以得到引用指向的结构体;

      2. 当接收者类型为结构体指针时,传入结构体编译不通过,因为通过结构体不能找到唯一确定的结构体指向的指针,(纯属瞎猜,这里有答案,没看懂,手动狗头)

    4. 接口嵌套

      类似Java中的接口继承;

      一个接口可以包含一个或者多个其他类型的接口,此时相当于该接口也定义了内嵌接口的方法;

      比如接口 File包含了ReadWrite 和 Lock 的所有方法,它还额外有一个 Close() 方法。

    type ReadWrite interface {
        Read(b Buffer) bool
        Write(b Buffer) bool
    }
    
    type Lock interface {
        Lock()
        Unlock()
    }
    
    type File interface {
        ReadWrite
        Lock
        Close()
    }
  • 相关阅读:
    如何通过npm编译Typescript代码
    TypeScript 中的':' 和'?:'的区别
    无法读取本地服务器JSON文件, 返回404错误
    Nodejs , npn 注册 包上传,更新,下载
    Java 字符流
    Java 字节流
    Java中的File类,递归是什么?
    JDBC工具类—如何封装JDBC
    JDBC的开发步骤
    vFor和vIf不要一起使用
  • 原文地址:https://www.cnblogs.com/virgosnail/p/12971086.html
Copyright © 2020-2023  润新知