1. 程式人生 > >最近學go語言的小結

最近學go語言的小結

    因為單位業務需要(據說是http://www.oschina.net/p/docker 這個方向),最近開始學go語言。google做這門語言的目的在於代替部分C/C++在伺服器端開發,這門語言是以C為主幹,模仿java,javascript及C++的基礎上,做了些微創新。個人感覺就是強型別語言版的javascript++。
    1、檔案結構,和C/C++一樣的主檔案。主函式如main可以寫在主檔案前面,而全域性變數及函式寫在後面,C/C++這樣做要專門的宣告,這個功能php也有,不過應該是php4以後的事。


2、變數的作用域和javascript類似,因而很方便地實現了閉包。


3、模組及結構體的變數及函式沒有顯式宣告public及private,而是第一個字母大寫就是public,小寫反之。模組分公私不知道有什麼用;結構體/物件這樣搞,以後要把private改成public就有點不方便——不過可以新加一兩個public函式呼叫private的變數或函式。


4、變數必須聲明後才能使用,且聲明後預設必須使用;強制性的編碼規範。這些都有利於寫出健壯的程式,缺點估計只是影響新手學習這一點。


5、指標:
C語言的指標--,另外使用了C++的“&”這個符號表示引用。除了使用結構體之外,個人以為要少用指標,多用標準庫。


6、泛型:
暫時用介面實現泛型,執行效率比較低下。


7、模板: 這個應該是仿C++的模板。模板是一種動態生成程式碼的方式,雖然不如一些語言的巨集那樣方便,但多數情況下夠用吧,我想。實際上我沒用過go語言這個功能。


8、併發程式設計:
在學,沒有發言權。


9、語法
對於學過C\C++ Java C# php javascrpt中任何一門的人來說,學習起來應該是毫無壓力的。


10、物件
物件由結構體實現,所以沒有構造和解構函式的概念。結構體的匿名成員實現繼承,可以多繼承,但遇到一樣的變數或方法就碰掉了。和C語言的面向物件類似,但更易實現。


11、執行效率
單執行緒比java慢,估計現在還是實驗性的,為方便以後加特性,所以沒做什麼優化。據說要放棄C,要像java一樣搞個虛擬機器,估計這樣效率還有提升的空間。


優點:
開發團隊比較強大:成員中有一位C語言及UNIX的創始人——C語言和Ruby據說是坑最多的語言。


基本沒有歷史負擔,暫時沒看到有什麼坑。


夠簡單,比C語言好學好配(windows上好配,linux上沒java好配——sudo要靠網速,中國的網速因公司不同而不同)好用,所以對於學校來說適合做強型別語言的入門語言——那些有C語言基礎的老師也好學,要大學老師去學erlang,這不可能。


缺點:


熱更新和熱部署的機能不成熟:
有笑話說java程式編譯的時間就是程式設計師喝咖啡的時間。熱部署還無所謂,熱更新是影響開發效率的事情。雖然go語言編譯速度比java快得多,但專案大了一樣慢。開發web程式的話,個人覺得還是php這種改了後直接F5一下的比較爽。


erlang和node.js是golang的主要競爭對手。erlang及node.js(javascript和c++)都是年頭久遠的語言,熱更新和熱部署都解決地不錯。