Go語言面向介面

2021-09-24 15:25:25 字數 1843 閱讀 5418

python中的鴨子型別

def

duck_run

(duck)

: duck.run(

)

python類似,go語言中也有鴨子型別。

go語言中介面的型別是inte***ce

type retriever inte***ce

接著我們穿件包retriever,然後在包中實現retriever

type retriever struct

func

(r retriever)

get(url string

)string

接著就可以定義鴨子型別

func

download

(r retriever)

string

介面變數裡面包含了實現者的型別實現者的指標

var r retriever

r = retriever.retriever

fmt.

printf

("%t %v\n"

, r, r)

{}

我們可以通過switch type判斷介面型別,有點類似於cpp中的typeid

switch v := r.

(type

)

也可以使用type assertion取出介面中的具體型別

t := r.

(retriever.retriever)

//r.(type)

inte***ce {}表示任意型別,通過這個我們可以實現泛型程式設計。

type queue [

]inte***ce

func

(q *queue)

push

(v inte***ce

)

當然我們也可以寫出相應的偏特化

func

(q *queue)

push

(v int

)

我們也可以在函式體內實現偏特化

func

(q *queue)

push

(v inte***ce

)

前者如果push其他型別會出現編譯錯誤,而後者是執行時出錯。

第乙個是stringer,類似於cpp中的operator<<運算子過載

func

(r *retriever)

string()

string

", r.contents)

}

第二個就是readerwriter

func

printcontents

(reader io.reader)

對檔案的抽象。

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注意,介面型別中的方法宣告是普通的方法宣告的簡化形式。它們只包括方法名...