上篇中,咱們講到了在Go語言中如何定義方法,今天,咱們將進一步深刻Go語言的面向對象編程。java
首先來看一個最基本的接口:編程
和定義一個結構體相似,只不過將struct換成了interface,而後聲明瞭兩個函數:draw()和count()。就這麼簡單,一個接口就定義好了,那麼如何實現接口呢?在java中咱們會讓一個類去實現接口,在實現的時候必須用implements關鍵字顯示聲明去實現,如:函數
class myshow implements show{...}spa
在Go語言中,不須要這麼作,咱們要作的只是去實現接口聲明的全部函數就能夠了,以下所示,就實現show這個接口:對象
上面代碼,咱們的osArgs結構體實現了文章開頭給出的show這個接口。其實就是用到上一篇的內容,給osArgs結構體定義了兩個方法,而這兩個方法就是接口定義的兩個函數,只是咱們具體完成了這兩個函數具體要作的功能。這不就是接口的功能麼,你能夠定義不少個結構體,分別實現show接口,使得它實現不一樣的功能。可是Go語言的接口實現不須要顯示去聲明實現了某個接口如上面的show,由於頗有可能在另一個地方,有一個show2的接口,它也是定義了draw()和count()函數。因此,你其實也是實現了show2這個接口,這彷佛很是靈活,自由。這裏不會講它如何如何好,或者如何如何很差,哈哈哈,由於......反正對於初學者來講,目前只須要懂得如何用就行了,等深刻後再去探討「好壞」的問題會更好。最後,看如何具體使用上面的接口:
blog
要想這個例子正常編譯運行,記得導入os包哦。繼承
如Go語言沒有繼承,而使用組合的方式來實現相似功能,其實接口也是,不像java或其它語言一個繼承接口,而是組合一個接口,咱們簡單的改寫前面的代碼:
咱們將以前的接口show改爲首字母大寫,還記得吧,這樣就能夠被外部包調用,並且把以前show接口的draw函數分離出一個Drawer接口,在Draw後加上er是由於在Go語言中習慣上,單一成員的接口的名稱是其成員名加-er。而後在Show接口中組合Drawer接口,如上代碼所示。接口
本篇接口就寫到這裏,在下一篇中將看到更多關於Go接口的相關內容。編譯