爲何你應該學習Go語言?

更新、更全的《Go從入門到放棄》的更新網站,更有python、go、人工智能教學等着你:http://www.javashuo.com/article/p-mxrjjcnn-hn.htmlpython

終於等到你!Go語言——讓你用寫Python代碼的開發效率編寫C語言代碼。程序員

1、爲何互聯網世界須要Go語言

世界上已經有太多太多的編程語言了,爲何又出來一個Go語言?數據庫

2、硬件限制:摩爾定律已然失效

摩爾定律:當價格不變時,集成電路上可容納的元器件的數目,約每隔18-24個月便會增長一倍,性能也將提高一倍。 換言之,每一美圓所能買到的電腦性能,將每隔18-24個月翻一倍以上。編程

15511542807193.jpg

從上面的圖表能夠看出,近十年單線程性能和處理器頻率保持穩定。咱們不能像以前同樣把添加更多晶體管當成是解決方案,由於在較小規模上一些量子特性開始出現(如隧道效應),而且由於在一樣小的空間裏放置更多晶體管的代價很是昂貴,每1美圓能夠添加的晶體管數量開始降低。緩存

製造商開始從其餘方面提升處理器的性能:安全

  1. 向處理器添加愈來愈多的內核,如四核和八核CPU。
  2. 發明了超線程技術。
  3. 爲處理器添加了更多緩存以提升性能。

但上述解決方案也有其自身的侷限性。由於成本緣由咱們不能無限制的爲計算機添加內核,也沒法無限制的添加緩存來提升性能,由於緩存越大,取值的性能越低。數據結構

咱們沒有辦法在硬件上一直取得突破,咱們須要提升軟件的性能或者說咱們須要高性能的軟件。併發

3、Go語言爲併發而生

如上所述,硬件製造商正在爲處理器添加愈來愈多的內核以提升性能。全部數據中心都在這些處理器上運行,更重要的是,今天的應用程序使用多個微服務來維護數據庫鏈接,消息隊列和維護緩存。所以,開發的軟件和編程語言應該能夠輕鬆地支持併發性,而且應該可以隨着CPU核心數量的增長而可擴展。框架

可是,大多數現代編程語言(如Java,Python等)都來自90年代的單線程環境。雖然一些編程語言的框架在不斷地提升多核資源使用效率,例如 Java 的 Netty 等,但仍然須要開發人員花費大量的時間和精力搞懂這些框架的運行原理後才能熟練掌握。

Go於2009年發佈,當時多核處理器已經上市。Go語言在多核併發上擁有原生的設計優點,Go語言從底層原生支持併發,無須第三方庫、開發者的編程技巧和開發經驗。

不少公司,特別是中國的互聯網公司,即將或者已經完成了使用 Go 語言改造舊系統的過程。通過 Go 語言重構的系統能使用更少的硬件資源得到更高的併發和I/O吞吐表現。充分挖掘硬件設備的潛力也知足當前精細化運營的市場大環境。

Go語言的併發是基於 goroutine 的,goroutine 相似於線程,但並不是線程。能夠將 goroutine 理解爲一種虛擬線程。Go 語言運行時會參與調度 goroutine,並將 goroutine 合理地分配到每一個 CPU 中,最大限度地使用CPU性能。開啓一個goroutine的消耗很是小(大約2KB的內存),你能夠輕鬆建立數百萬個goroutine

goroutine的特色:

  1. goroutine具備可增加的分段堆棧。這意味着它們只在須要時纔會使用更多內存。
  2. goroutine的啓動時間比線程快。
  3. goroutine原生支持利用channel安全地進行通訊。
  4. goroutine共享數據結構時無需使用互斥鎖。

4、Go性能強悍

與其餘現代高級語言(如Java/Python)相比,使用C,C++的最大好處是它們的性能。由於C/ C++是編譯型語言而不是解釋的語言。 處理器只能理解二進制文件,Java和Python這種高級語言在運行的時候須要先將人類可讀的代碼翻譯成字節碼,而後由專門的解釋器再轉變成處理器能夠理解的二進制文件。 15511649241043.jpg 同C,C++同樣,Go語言也是編譯型的語言,它直接將人類可讀的代碼編譯成了處理器能夠直接運行的二進制文件,執行效率更高,性能更好。 15511709770708.jpg 數據來源:https://benchmarksgame-team.pages.debian.net/benchmarksgame/

能夠看出,Go 語言在性能上更接近於 Java 語言,雖然在某些測試用例上不如通過多年優化的 Java 語言,但畢竟 Java 語言已經經歷了多年的積累和優化。Go 語言在將來的版本中會經過不斷的版本優化提升單核運行性能。

5、Go語言簡單易學

5.1 語法簡潔

Go 語言簡單易學,學習曲線平緩,不須要像 C/C++ 語言動輒須要兩到三年的學習期。Go 語言被稱爲「互聯網時代的C語言」。Go 語言的風格相似於C語言。其語法在C語言的基礎上進行了大幅的簡化,去掉了不須要的表達式括號,循環也只有 for 一種表示方法,就能夠實現數值、鍵值等各類遍歷。

5.2 代碼風格統一

Go 語言提供了一套格式化工具——go fmt。一些 Go 語言的開發環境或者編輯器在保存時,都會使用格式化工具進行修改代碼的格式化,這樣就保證了不一樣開發者提交的代碼都是統一的格式。(吐槽下:不再用擔憂那些看不懂的黑魔法了…)

5.3 開發效率高

15511721724188.jpg Go語言實現了開發效率與執行效率的完美結合,讓你像寫Python代碼(效率)同樣編寫C代碼(性能)。

6、學習Go語言的前景

目前Go語言已經⼴泛應用於人工智能、雲計算開發、容器虛擬化、⼤數據開發、數據分析及科學計算、運維開發、爬蟲開發、遊戲開發等領域。

Go語言簡單易學,天生支持併發,完美契合當下高併發的互聯網生態。Go語言的崗位需求持續高漲,目前的Go程序員數量少,待遇好。

抓住趨勢,要學會作一個領跑者而不是跟隨者。

國內Go語言的需求潛力巨大,目前不管是國內大廠仍是新興互聯網公司基本上都會有Go語言的崗位需求。

下圖是應用Go語言的公司舉例:

image-20190203135218456.png

除了上面列出的大廠外,不少小型公司或創業公司也開始使用Go語言,而且不少公司把Go語言做爲其主要開發語言。

如今就開始你的Go語言學習之旅吧!人生苦短,let’s Go.

參考連接

相關文章
相關標籤/搜索