向Java程序員介紹Go,還需要優雅的介紹,我覺得主要從以下角度考慮。
1.Java有哪些優點,Go是否擁有;
2.Java有哪些不足,Go有沒有解決;
3.Go特別棒的特性;
Java的優點,Go是否擁有
Java經過很多年的發展,形成了很好的生態。一門語言的生態是至關重要的,就好比一家公司的壁壘。Java一直以來,有谷歌、IBM、Oracle等超級大廠的支持,有開源界牛逼的Apache組織支持,產生了很多頂級的軟件,比如大名鼎鼎的Hadoop、ElasticSearch等等,Java社區的原則也比較統一,基本Spring一統天下,沒那么多糾結,很成熟!這些都是很強的壁壘!
相較而言,Go語言還比較年輕。但是,自從Docker、k8s的興起,為Go語言的生態搭建了自己的壁壘,同時帶來了一大批學習者,很有明星項目效應!
因此,在大型項目中,一般會多語言、多生態并存!
Java有哪些不足,Go有沒有解決
1.Java目前大家抱怨比較多的是寫法啰嗦,雖然新版本在不斷改進,但畢竟有歷史包袱。
2.Java學習門檻較高。拿JavaWeb開發來說,首先你得學完JavaSE,然后是JavaEE,學習Tomcat這類容器,接著你還得掌握SSH框架,這些經過了很多年的發展,生態龐大,學習成本較高!
3.Java程序內存占用較多,經常莫名卡死。目前公司使用了confluence一套系統,隔斷時間就有人反饋打不開了,和美團的人聊過,他們也是遇到同樣的問題,得定期重啟。
4.Java近期版權似乎也是個問題
Go從誕生之日起,就崇尚簡潔,崇尚工程實踐,沒有歷史包袱,可以借鑒先輩們的優秀設計經驗。比如對C語言揚棄,保留指針,但廢棄指針運算;避免隱式類型轉換帶來莫名問題,必須顯示轉換。雖然是靜態語言,但從Python這樣的動態語言借鑒了很多優點,語言層面支持slice和map,使得開發效率有很大提升;同時支持面向過程、面向對象和函數式編程等等。
整體上,Go語言簡潔,易于學習,每個人寫出的代碼風格一致。在內存占用方面,因為沒有重的VM,還是比較少的。
在現在重前端的大背景下,服務端負責API的情況下,Go會是很好的選擇。
Go特別棒的特性
1.Go的招牌是并發。因為原生支持協程(goroutine),使得寫并發程序非常方便。goroutine+channel一對招牌搭檔!
2.極快的編譯速度。有一個段子說,Go語言是在C++項目在編譯的時候開發出來的!
3.強大的工具鏈。
4.標準庫提供net和http包,可以很方便的實現一個HTTP服務。
5.類鴨子類型的接口,interface的設計。
6.標準庫支持日志和單元測試。
7.和Java一樣,自帶GC。
總結
無意語言之爭,只是希望大家對語言有更全面的了解,根據情況選擇適合的,沒有最好,只有最適合!
當然,Go也在不斷完善中,比如沒有泛型,近期才對包依賴有了較好的官方支持,被人議論最多的錯誤處理等,如果GC一樣,我相信Go會越來越好。
最后補充:Go是谷歌出品的,創作者是幾個骨灰級程序員,國內有很多大廠在使用Go,學習Go語言能夠讓你比Java更容易接觸底層知識!