標籤:

我們說Golang牛逼都在說些什麼?

先說好,我並不認為go是世界上最好的語言!但是我覺得至今用著最爽覺得最牛逼的編譯型語言(逃。。。)

那麼說它牛逼,我們都在說些什麼呢?

首先,說它牛逼併不是說已經達到了至今各方面最好甚至達到無可超越的境界,說實話我不認為任何一門語言真的達到這種程度。你要真的非要分出個高低,谷歌曾發布了一個研究報告,仔細比較了C++、Java、Scala和Go語言的性能。毫無疑問C++是四種語言中運行速度最快的,但是該報告同時也指出,優化代碼相對困難,這需要相當的努力、熟練的水準,不是平均水平的程序員所能達到。而Go旨在兼顧性能的情況下消除這些限制,它仍然是年輕的,它是為了更簡潔地,更高效地完成編碼的工作,它自帶垃圾回收,可以很安全很容易地寫出並發的程序,並且Go還在不斷成長,運行性能不斷提高,編譯速度正大幅度提升,GC延遲不斷改善,runtime也不斷優化。

近幾年,Go在網路系統,微服務架構,高並發、通信交互複雜、大數據和分散式領域不斷大放異彩,真正做到了解決現代編程的難題。例如以360消息推送系統為例,目前360消息推送系統服務於50+內部產品,萬款開發平台App,實時長連接數億量級,日獨數十億量級,1分鐘內可以實現億量級廣播,日下發峰值百億量級,400台物理機,3000多個實例分布在9個獨立集群中,每個集群跨國內外近10個IDC;今日頭條當前後端服務超過80%的流量是跑在 Go 構建的服務上。微服務數量超過100個,高峰 QPS 超過700萬,日處理請求量超過3000億;嗶哩嗶哩對外統一的API Gateway,對內的運營平台,以及各種數據匯流排、Proxy、微服務框架、IM等中間件和基礎設施等全都是Go開發,是國內對微服務架構一個非常不錯的實踐,這樣的案例很多,越來越多的團隊和開發者在轉向Go,為什麼?我覺得一門語言真正的流行並不在於這個語言本身多麼的牛逼,而是它能不能解決牛逼的問題。Go的大放異彩主要是它能在考慮人員成本,時間成本,穩定性,安全性和開發維護簡單這些方面表現非常好,以及順應了互聯網和大數據環境下複雜網路系統,高並發應用的需求。

1,語言本身優勢

  • 簡單易學,有C語言的基因,Go 語言只有 25 個關鍵字,但是表達能力極強跨平台編譯,可以不依賴與系統信息;可以編譯成機器碼,不依賴其他庫

  • 靜態類型語言,有動態語言的感覺,因為靜態語言就是可以在編譯的時候檢查出來隱藏的大多數問題,動態語言的感覺就是很多的包可以使用,寫起來效率很高,所以很容易從php或python語言轉過來。

  • 語言層面支持並發,這是 Go 語言的最大的特色,天生支持並發,這就大大降低了並發程序編寫的門檻

  • 內置 runtime,自帶垃圾回收機制

  • 官方豐富的標準庫,內置大量庫,特別是網路庫非常強大,只要是很需要都會被帶進標準庫,真正的實用主義

  • 內置強大工具,使 review 變的簡單,可以保證代碼風格統一;自帶debug工具,可以很友好很直觀排查問題

  • 支持引入C代碼

2,跨平台且部署簡單

跨平台這個特性簡直沒有更好,你可以不用有任何改動將運行在windows上的代碼換在linux上運行,且可以跨平台編譯,例如我們團隊客戶就是上帝,別人就是想用windows,我們你呢個咋的對吧,客戶一會心情不好想上linux我們就得老老實實上,客戶要單機部署,就去單機部署,客戶要上60W終端的大項目,我們能拒絕上帝嗎?

3,開發成本低快速迭代快

由於Go語言的特性,使用簡單友好,我第一次使用Go開發項目時幾乎沒有什麼學習成本(當然,後來慢慢還是要好好理解很多特性,學會避開很多坑的),項目很快完成功能,而且後期bug相比之前寫C/C++減少了很多。而且編譯速度快,及時跨平台部署也只需要加入編譯參數就可輕鬆搞定。關鍵是代碼風格非常一直,對於後期維護和擴展非常好,況且目前互聯網公司人員流動還是非常大的,能不能保證項目持續穩定成長非常重要。

4,很簡單可以實現高並發業務

開發出能充分利用硬體資源的應用程序是一件很難的事情,現代計算機都擁有多個核,但是大部分編程語言都沒有有效的工具讓程序可以輕易利用這些資源,一些語言需要寫大量的線程同步代碼來利用多個核,很容易導致錯誤,但Go在語言級別實現並發,這是最大的基礎,我們開發者不必再去關心並發邏輯的實現,而是在適當的時候將一部分代碼go出去即可,這些並發邏輯會有內置的runtime管理。簡直是並發業務的神級殺手。根據之前開發的一個內部API緩存系統壓力測試,單機版(四核,8G,3.0GHz)主鍵查詢可達到10WQPS,並且限制是在帶寬,帶寬增大的話,遠不止10W。

5,語言在不斷改進成長

一門語言不可能是完美的,但重在一直改變並向前兼容,Go社區不斷發展,開發團隊也一直在做語言上的優化,運行性能不斷提高,編譯速度正大幅度提升,GC延遲不斷改善,runtime也不斷優化,各種標準庫支持和優化不斷豐富。

下面貼下1.8和以往版本比較:

1.5 VS 1.8

1.6 VS 1.8

1.7 VS 1.8

人生苦短,我用Golang!


推薦閱讀:

多語對照資源集結帖(長期更新)
請問誰能幫忙翻譯一下這張圖片的內容?
發人深省的幽默(2)---- Ricky Gervais
學兩門極其相似的外語是怎樣一種體驗?

TAG:Go语言 | 语言 |