Go學習筆記:關於Java、Python、Go程式設計思想的不同

發表於2013-08-04

看了兩週七牛團隊翻譯的《Go語言程式設計》,基本上領略到了Go語言的魅力。學習一個語言,語法什麼的任何人都是很容易學會,難就難在充分領略到這門程式語言的思想。

物件導向

喂!屌絲碼農該找個物件了。

除去Java Python Go這三種語言底層以及語法的不同,這裡以個人的理解只說說其物件導向方面的思想。 一個簡單的示例:

描述人,李雷,韓梅梅,他倆都是好學生。

將用 java python go 這三種語言分別簡單的描述。


Java 思想

人,是抽象的概念,可以洗衣做飯的靈長目物種,沒法特指一樣具體的東西,但它也有一些如性別、撒尿這類的屬性和功能。

這裡使用抽象類,是因為名字都是父母起的,但撒尿的方法男女不同。接下來是具象人這個抽象的概念了。這裡就固話性別屬性並且具體定義撒尿的方式。

現在有男人和女人了,然後李磊和韓梅梅就要來折磨我們了

李磊和韓梅梅都是好學生,我們這裡定義學習的介面,這裡的介面就是,大家必須得死學傻學,怎麼學看你自己。

上面是教育部規定的,李磊韓梅梅作為學生必須得學,男人女人都得經歷的。來實現學習介面。

java的思想大致就是這麼樣。很嚴謹,就像一個老學究,1就是1,2就是2。

這是所有的java程式碼

Main.java


Python 思想

python無以言狀的靈活,你就是上帝!

這裡我們只要建立一個根類,其他的東西,隨時隨地,想加就加。

下面就邊執行邊豐滿它

python中一切物件都是鴨子型別,何謂鴨子型別?只要會”嘎嘎”叫的東西都是鴨子。應用到上面場景中,只要具有學習和 撒尿方法的物件都可以看作人了。從另一方面說,我對於鴨子只關注它是否能夠”嘎嘎”叫,如果能,不管是什麼東西,那麼它就是一隻鴨子; 對於人,只關注他們是否能撒尿與學習,既能撒尿又能學習,他憑什麼就不是人?

python和java就好像陰陽之替的東方玄學之餘西方哲學。

這是所有的python程式碼

test.py:


Go 思想

物件導向之於Go,沒有繼承這麼一說,更像是C與Python的結合體,並把鴨子型別發揚到極致。

介面(interface)就好比是一隻”鴨子”,而interface結構體內包裹的方法就是這隻”鴨子”所具有的功能,Go中,介面可以描述為: 具有這些功能的傢伙就是這隻”鴨子”

方法(func)被定義在結構(類/struct)之外,被繫結於這個結構之上,可以描述為: 這是它的功能 ,當一個struct中的一些方法都包含在某個interface中時,我們就說: 啊哈,這就是那隻”鴨子”,哪怕它多長了幾條腿(func),它也是啊

關於繼承,沒有,go中雖然內嵌很像繼承但不是。繼承是一脈相傳,而go的內嵌表達出你中有我我中有你的情懷,需要用到某個struct的功能了,那麼就對它說 你就是我的一部分

struct、interface、func 這些幾乎就是Go物件導向的全部了,如此簡潔。

package main


擺脫C++/Java/Python等思想的桎梏,才能領略Go的魅力

相關文章