Go語言 介面篇

2021-09-23 19:44:04 字數 1774 閱讀 8311

在go中,介面inte***ce其實和其他語言的介面意思也沒什麼區別。inte***ce理解其為一種型別的規範或者約定。一種型別是不是「實現」了乙個介面呢?就看這種型別是不是實現了介面中定義的所有方法。比如1

2

3

4

5

type iinte***ce

這段話就定義了乙個介面,它包含兩個函式get和put

好了,我的乙個介面實現了這個介面:

1

2

3

4

5

6

7

8

type sstruct

func (this*s) getint

func (this*s)put(vint)

這個結構s就是實現了介面i

對於空介面inte***ce{} 其實和泛型的概念很像。任何型別都實現了空介面。

下面舉個例子:

乙個函式實現這樣的功能:

以任何物件作為引數,如果這個物件是實現了介面i,那麼就呼叫介面i的get方法

很多語言都是這樣的邏輯:

1

2

3

4

5

6

function g(obj)

}

go中是這樣實現的:

1

2

3

4

func g(anyinte***ce{})int

這裡的any.(i)是不是很語義化?「任何實現了i介面的物件」

下面看幾個inte***ce的例子:

1

2

3

4

func somefunction(winte***ce)

這個例子中,直接將inte***ce定義在引數中,很特別…

1

2

3

4

5

6

func weirdfunc( iint)inte***ce{}

returni;

}

這裡例子中,由於有可能返回string,也有可能返回int,因此將返回值設定成為inte***ce,這個在go的package包中會大量見到。

Go 語言介面

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

Go語言 介面

介面代表一種呼叫契約,是多個方法宣告的集合。介面要實現的是做什麼,而不關心如何做。介面最常見的使用場景是對包外提供訪問,或預留擴充套件空間。go語言介面實現機制很簡潔,只要目標型別方法集內包含介面宣告的全部方法,就被視為實現了該介面,無需做顯示宣告,當然目標型別可實現多個介面。其實介面也是一中結構,...

Go語言 介面

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