go語言設計哲學

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 世界是並行的----先不說宇宙,就整個地球來說,世界萬物都是並行發生的;天生對並發支援良好的go語言更容易描述並行的世界;

世界是由物質組合構成的---微觀世界:由小的粒子組合成大的粒子;宏觀世界:由小的物體組合成大的物體;
繼承只能描述現實世界的一小部分,使用繼承是不全面的;go的設計選擇的是組合,這個和現實世界比較吻合的設計,表現力更強;

世界是標準化的---隨著生產力的發展,社會分工越來與詳細,越來越多行業有了國際標準,任何一個國家的、任何一個公司只要按照這個標準生產器件,就能裝配到一台機器上;IBM/PC就是硬體模組化和介面化一個最成功的例證;
軟體也可如此,go的介面是duck模型,面向介面編程,而不需要顯示的聲明,將語言能做的事情交給語言做;

正交性--
幾何上的正交指的是兩個向量垂直關係,一個向量在另一個向量方向的投影是一個點;
現實中的正交是指多個因素,一個發生變化,不會影響其他的因素;在不減少表現力的情況下,正交是保持事物穩定性和簡單性的最好設計;
go很好的遵循了這個規律,go的多個特性之間都是正交的:goroutine,介面,組合,類型系統等;

舉一個典型的正交設計例子:比如客戶嫌雨傘太小,單純的加長傘杆是不行的,這會增加雨傘的長度;最後計出摺疊式的雨傘;這種設計能保證雨傘大小和雨傘長度滿足正交關係,當然這會增加雨傘生產的複雜性)

把複雜性留給廠家,把便利性留給客戶;對於程式設計語言:盡量把複雜性留給語言實現者和編譯器,把簡單性留給語言使用者,這才是一種好的語言;


少即是多---沒有萬能的語言,換句話說一門語言不可能包含所有的特性;想囊括所有特性的語言一定是非常的複雜(C++);

保持簡單性的方法就是:每種特性僅提供一種方法,減少重複、冗餘,試想一下,如果汽車有多個刹車板,你會感覺更安全,更便利嗎?

只提供一種方法做事情,把事情做到極致,這就是go的原則,解放程式員,不要給他提供很多雷同的功能和語句,這不會使問題簡單,只會加重程式員的心智負擔



二八定律---在程式設計語言中描述就:百分之八十的代碼僅僅使用到百分之二十的語言特性,增加語言特性,並不能保證開發效率的提升,原因是它會增加複雜性,導致更容易犯錯;

有些複雜的編程問題其實可以通過庫的形式來輔助支援;大部分


異常與錯誤---所謂異常就是沒有預料到的非期望的事情發生了,所謂錯誤就是預料到的非期望的事情發生了;go語言把兩種情況終於給分清楚了;什麼是防禦性編程,怎麼保持程式的健壯性;

每次調用都檢查error確實讓代碼挺不美觀的,個人認為為了健壯性,進行防禦性的編程也是可以接收的;通過一定的技巧是可以避免錯誤碼冗餘性;


論述完普世定律後,我來總結一下GO語言的哲學:

1.面向介面編程

2.使用組合的編程

3.正交性:語言設計的正交性,保證語言的穩定性和簡單性

4.少即是多:有且僅有一種方法把事情做好做對

5.並發語言層面支援:並發更好利用多核,有更強的表現力來類比真實世界

6.開放性:開源,語言的實現對程式員不是個黑盒子,任何想瞭解語言實現的人都可以參與進來


go 沒有像JAVA一樣,宗教式的完全物件導向設計;完全物件導向設計就是一刀切的宗教式的設計,但其並不能很好的表述這個世界,這就導致其表現力不足,最後通過設計模式和面向切面等設計技巧來彌補語言方面的缺陷;go是面向工程的實用主義者,其糅合了物件導向的設計,函數式設計和過程式設計的優點;原來通過各種設計模式的設計通過函數、介面、組合等簡單方式就搞定了;go有更多膠水的東西比如:全域變數、常量,函數,閉包等等,可以輕鬆的的把模組銜接和驅動起來; JAVA就好比:手裡握著是鎚子,看什麼都是釘子,什麼都是類的對象,這個和現實世界不符,類表示單個事物還可以,一旦表示多個事物及其互動,其表現力也就會遇到各種挑戰。

      是時候該轉變觀念了,不要動不動就提物件導向設計,動不動就提設計模式(特指某些招聘偽專家);編程的世界是多樣的,編程思想和範式是豐富多彩的,不要再沿著錯誤的路線繼續前進了,擁抱go吧。

        









聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.