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)
  • 相关阅读:
    codeforces C. No to Palindromes!
    codeforces D. Pashmak and Parmida's problem
    codeforces C. Little Pony and Expected Maximum
    codeforces D. Count Good Substrings
    codeforces C. Jzzhu and Chocolate
    codeforces C. DZY Loves Sequences
    codeforces D. Multiplication Table
    codeforces C. Painting Fence
    hdu 5067 Harry And Dig Machine
    POJ 1159 Palindrome
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15450600.html
Copyright © 2011-2022 走看看