Go語言 介面

2021-07-24 21:22:01 字數 1005 閱讀 2257

介面代表一種呼叫契約,是多個方法宣告的集合。介面要實現的是做什麼,而不關心如何做。介面最常見的使用場景是對包外提供訪問,或預留擴充套件空間。

go語言介面實現機制很簡潔,只要目標型別方法集內包含介面宣告的全部方法,就被視為實現了該介面,無需做顯示宣告,當然目標型別可實現多個介面。

其實介面也是一中結構,只是編譯器會對其做出很多限制:

- 不能有欄位

- 不能定義自己的方法

- 只能宣告方法,不能實現

- 可嵌入其它介面型別

介面通常以er作為字尾,方法名是宣告組成部分,但引數名可不同或省略。

package main

import(

"fmt"

)type tester inte***ce

type data struct{}

func (*data)test(){}

func (data)string()string

func main()

如果介面沒有任何方法宣告,那麼它就是乙個空介面(inte***ce{}),它的用途非常廣泛可被賦值為任何型別的物件。介面變數預設值時nil,如果實現介面的型別支援可做相等運算。

package main

import(

"fmt"

)func main()

fmt.println(a == nil,a == b)

a,b =10

,10 fmt.println(a == b)

}

輸出:

true true

true

可以像匿名字段那樣嵌入其它介面。目標型別方法集中必須擁有包含嵌入介面方法在內的全部方法才算實現了該介面。嵌入其它介面型別相當於將其宣告的方法集匯入。這就要去不能有同名方法,因為不支援過載。不能嵌入自身或迴圈嵌入這樣會導致遞迴錯誤。介面可直接用於變數定義,或作為結構字段型別。

Go 語言介面

go 語言提供了另外一種資料型別即介面,它把所有的具有共性的方法定義在一起,任何其他型別只要實現了這些方法就是實現了這個介面。例項 定義介面 type inte ce name inte ce 定義結構體 type struct name struct 實現介面方法 func struct name...

Go語言 介面

在go語言中,乙個介面型別總是代表著某一種型別 即所有實現它的型別 的行為。乙個介面型別的宣告通常會包含關鍵字type 型別名稱 關鍵字inte ce以及由花括號包裹的若干方法宣告。示例如下 type animal inte ce注意,介面型別中的方法宣告是普通的方法宣告的簡化形式。它們只包括方法名...

go語言介面

介面在底層的實現有兩個部分 type 和 data。在原始碼中,顯式地將 nil 賦值給介面時,介面的 type 和 data 都將為 nil。此時,介面與 nil 值判斷是相等的。但如果將乙個帶有型別的 nil 賦值給介面時,只有 data 為 nil,而 type 為 nil,此時,介面與 ni...