https://geektutu.com/post/quick-golang.html
一般而言,接口定義了一組方法的集合,接口不能被實例化,一個類型可以實現多個接口。
舉一個簡單的例子,定義一個接口 Person
和對應的方法 getName()
和 getAge()
:
1 |
type Person interface { |
- Go 語言中,並不需要顯式地聲明實現了哪一個接口,只需要直接實現該接口對應的方法即可。
- 實例化
Student
后,強制類型轉換為接口類型 Person。
在上面的例子中,我們在 main 函數中嘗試將 Student 實例類型轉換為 Person,如果 Student 沒有完全實現 Person 的方法,比如我們將 (*Student).getName()
刪掉,編譯時會出現如下報錯信息。
1 |
*Student does not implement Person (missing getName method) |
但是刪除 (*Worker).getName()
程序並不會報錯,因為我們並沒有在 main 函數中使用。這種情況下我們如何確保某個類型實現了某個接口的所有方法呢?一般可以使用下面的方法進行檢測,如果實現不完整,編譯期將會報錯。
1 |
var _ Person = (*Student)(nil) |