天天看點

為什麼要學習Go語言?

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

為什麼網際網路世界需要Go語言

世界上已經有太多太多的程式設計語言了,為什麼又出來一個Go語言?

硬體限制:摩爾定律已然失效

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

從上面的圖表可以看出,近十年單線程性能和處理器頻率保持穩定。我們不能像之前一樣把添加更多半導體當成是解決方案,因為在較小規模上一些量子特性開始出現(如隧道效應),并且因為在同樣小的空間裡放置更多半導體的代價非常昂貴,每1美元可以添加的半導體數量開始下降。

制造商開始從其他方面提高處理器的性能:

  1. 向處理器添加越來越多的核心,如四核和八核CPU。
  2. 發明了超線程技術。
  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

    共享資料結構時無需使用互斥鎖。

Go性能強悍

與其他現代進階語言(如Java/Python)相比,使用C,C++的最大好處是它們的性能。因為C/ C++是編譯型語言而不是解釋的語言。

處理器隻能了解二進制檔案,Java和Python這種進階語言在運作的時候需要先将人類可讀的代碼翻譯成位元組碼,然後由專門的解釋器再轉變成處理器可以了解的二進制檔案。

同C,C++一樣,Go語言也是編譯型的語言,它直接将人類可讀的代碼編譯成了處理器可以直接運作的二進制檔案,執行效率更高,性能更好。

資料來源:https://benchmarksgame-team.pages.debian.net/benchmarksgame/

可以看出,Go 語言在性能上更接近于 Java 語言,雖然在某些測試用例上不如經過多年優化的 Java 語言,但畢竟 Java 語言已經經曆了多年的積累和優化。Go 語言在未來的版本中會通過不斷的版本優化提高單核運作性能。

Go語言簡單易學

文法簡潔

Go 語言簡單易學,學習曲線平緩,不需要像 C/C++ 語言動辄需要兩到三年的學習期。Go 語言被稱為“網際網路時代的C語言”。Go 語言的風格類似于C語言。其文法在C語言的基礎上進行了大幅的簡化,去掉了不需要的表達式括号,循環也隻有 for 一種表示方法,就可以實作數值、鍵值等各種周遊。

代碼風格統一

Go 語言提供了一套格式化工具——

go fmt

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

開發效率高

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

學習Go語言的前景

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

Go語言簡單易學,天生支援并發,完美契合當下高并發的網際網路生态。Go語言的崗位需求持續高漲,目前的Go程式員數量少,待遇好。

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

國内Go語言的需求潛力巨大,目前無論是國内大廠還是新興網際網路公司基本上都會有Go語言的崗位需求。

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

除了上面列出的大廠外,很多小型公司或創業公司也開始使用Go語言,并且很多公司把Go語言作為其主要開發語言。

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

參考連結