zoukankan      html  css  js  c++  java
  • go判断类型是否实现接口所有方法

    https://geektutu.com/post/quick-golang.html

    一般而言,接口定义了一组方法的集合,接口不能被实例化,一个类型可以实现多个接口。

    举一个简单的例子,定义一个接口 Person和对应的方法 getName() 和 getAge()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    type Person interface {
    getName() string
    }

    type Student struct {
    name string
    age int
    }

    func (stu *Student) getName() string {
    return stu.name
    }

    type Worker struct {
    name string
    gender string
    }

    func (w *Worker) getName() string {
    return w.name
    }

    func main() {
    var p Person = &Student{
    name: "Tom",
    age: 18,
    }

    fmt.Println(p.getName()) // Tom
    }
    • Go 语言中,并不需要显式地声明实现了哪一个接口,只需要直接实现该接口对应的方法即可。
    • 实例化 Student后,强制类型转换为接口类型 Person。

    在上面的例子中,我们在 main 函数中尝试将 Student 实例类型转换为 Person,如果 Student 没有完全实现 Person 的方法,比如我们将 (*Student).getName() 删掉,编译时会出现如下报错信息。

    1
    *Student does not implement Person (missing getName method)

    但是删除 (*Worker).getName() 程序并不会报错,因为我们并没有在 main 函数中使用。这种情况下我们如何确保某个类型实现了某个接口的所有方法呢?一般可以使用下面的方法进行检测,如果实现不完整,编译期将会报错。

    1
    2
    var _ Person = (*Student)(nil)
    var _ Person = (*Worker)(nil)
  • 相关阅读:
    20170822xlVBA ExportCellPhone
    【C/C++】C++ warning: control reaches end of non-void function return
    【C/C++】例题3-5 生成元/算法竞赛入门经典/数组与字符串
    对象类型的参数传递
    对象的创建和使用
    方法的重载
    构造方法
    方法
    修饰符
    类的一般形式
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15450600.html
Copyright © 2011-2022 走看看