go語言介面與duckTyping

2021-10-06 07:44:09 字數 2800 閱讀 4504

個人通俗解釋:不同於類的界門綱目科屬種,這種才是鴨子;而是凡是具有鴨子的功能,那就可以認為其是鴨子。

結合**層面大概是:並非得繼承介面(並非一定是鴨科,河鴨屬),而是乙個sruct只要實現了裡面的方法,就可以用這個介面進行呼叫(就是鴨子了)

func

main()

// 這裡對於cesggg()無所謂aaa實現其他的,只要實現了需要的介面就可以呼叫,亦即它就是鴨子

cesggg

(bbb)

}type aaa struct

type bbb inte***ce

type ccc inte***ce

func

cesggg

(bbb bbb)

func

(a aaa)bb(

)func

(a aaa)cc(

)

用大黃鴨解釋就是,有個鴨子介面,裡面有鴨子叫的方法

乙個鴨子struct實現了它,可以用鴨子介面呼叫

但是乙個狗子也實現了它,也可以用鴨子介面呼叫,那這個狗,他就是個鴨子

詳見下列**

// 定義乙個鴨子介面

type duck inte***ce

// 乙個函式,這個函式用來逗鴨子,需要傳入乙個鴨子

func

makefunofduck

(d duck)

// 真鴨子

type realduck struct

// 狗鴨子,會學鴨子叫的狗

type dogduck struct

func

(dogduck dogduck)

jiao

(s string

)func

(realduck realduck)

jiao

(s string

)func

main()

makefunofduck

(d)// 這個狗,可以鴨子叫,他就是個鴨子

d = dogduck

makefunofduck

(d) fmt.

println

("ces"

)ces()

}func

ces(

)}

這裡還涉及到一些介面使用方法

// 介面定義好一系列(共性)方法,

// 結構體只要實現介面裡的方法,即實現了這個介面,所有的方法都要實現才可以

type phone inte***ce

type mp4 inte***ce

// 多個介面組合,亦可以新增自己的方法

// 可以在使用的時候,自己結合大量功能,靈活性高

type smartphone inte***ce

type nokia struct

// 各自實現自己想要用的介面

func

(nk nokia)

msg(receiver string

)func

(nk nokia)

call

(receiver string

)// 使用者只需要實現方法就行,其他的都不用過問

// 實現了鴨子的叫,那就是鴨子

func

call

(receiver string

)func

msg(receiver string

)// 因為要被smartphone使用,所以還要實現另外的相關介面

func

playvideo

(videoname string

)func

videocall

(user string

)// 還可以輕鬆實現系統的介面

func

(nk nokia)

string()

string

func

string()

string

func

main()

var iphone smartphone

"steve"

} this is tom 's phone,是因為實現了string()

fmt.

printf

("%t %v\n"

,phone, phone)

fmt.

printf

("%t %v\n"

,iphone, iphone)

connectionwithcall

(phone,

"steve"

)connectionwithcall

(iphone,

"tom"

)connectionwithmsg

(phone,

"steve"

)connectionwithmsg

(iphone,

"tom"

)connectionwithvideo

(iphone,

"tom"

) iphone.

playvideo

("video")}

func

connectionwithcall

(p phone,u string

)func

connectionwithmsg

(p phone,u string

)func

connectionwithvideo

(p smartphone,u string

)

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