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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM