這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。先說好,我並不認為go是世界上最好的語言!但是我覺得至今用著最爽覺得最牛逼的編譯型語言(逃。。。)
那麼說它牛逼,我們都在說些什麼呢?
首先,說它牛逼併不是說已經達到了至今各方面最好甚至達到無可超越的境界,說實話我不認為任何一門語言真的達到這種程度。你要真的非要分出個高低,Google曾發布了一個研究報告
,仔細比較了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社區不斷髮展,Team Dev也一直在做語言上的最佳化,運行效能不斷提高,編譯速度正大幅度提升,GC延遲不斷改善,runtime也不斷最佳化,各種標準庫支援和最佳化不斷豐富。
下面貼下1.8和以往版本比較:
1.5 VS 1.8
1.6 VS 1.8
1.7 VS 1.8
人生苦短,我用Golang!