漫談Go語言後端開發

為什麼使用Go語言做後端開發?

簡單高效:幾乎所有主流的編程語言如Java、C++、PHP、Python、JavaScript等等都是可以用於服務端開發的,Go語言作為後起之秀,在語言層面具有語法簡潔、執行效率高(底層語言)的特點;相比之下,Java和Python、PHP都顯得低效,C++則太過麻煩,而Go則可以做到簡單與高效兼顧;

高併發:Go語言是主打併發、為併發而生的,其出發點即是瞄準大數據+雲計算時代背景下的高併發、分佈式應用場景;

跨平臺:可以在不同平臺直接編譯生成可執行程序,基礎內存佔用很少,小應用佔用幾M大型應用佔用個幾十M就能很好運行,這使得golang可以在樹莓派之類的小設備上很好的運行,這一點表現比java要好的多;

容器化、分佈式、微服務化是服務端發展的潮流,在這幾個方向上:

容器化:容器領域Go語言是絕對的霸主,大家所熟知的Docker和Kubernets(K8S)就是使用Go語言開發的;

分佈式:最好的例證就是以太坊,因為區塊鏈即分佈式賬本;

微服務:Go語言支持微服務的最好例證是今日頭條,今日頭條當前後端服務超過80%的流量是跑在 Go 構建的服務上。微服務數量超過100個,高峰 QPS 超過700萬,日處理請求量超過3000億,可能是業內最大規模的Go應用。

Go語言成功案例

Docker(容器)

到現在,Docker幾乎是Go再難找到也難以複製的一個成功案例。Docker項目在2014年9月份就拿到了C輪4000萬美元融資,版本迭代速度超快,目前從GitHub看到已有78個版本,而它僅僅是再2013年初才正式開始的一個項目而已。目前,國內Docker技術推廣也進行的如火如荼,比如 Docker中文社區,CSDN也建立了 Docker專區。

Docker團隊之所以喜歡用Go語言,主要是Go具有強大的標準庫、全開發環境、跨平臺構建的能力。

Kubernetes(容器)

Kubernetes是2014年夏天Google推出的Kubernetes,基於Docker,其目的是讓用戶通過Kubernetes集群來進行雲端容器集群的管理,而無需用戶進行復雜的設置工作。系統會自動選取合適的工作節點來執行具體的容器集群調度處理工作。其核心概念是Container Pod(容器倉)。

Etcd & Fleet(分佈式數據庫)

etcd是由CoreOS開發並維護鍵值存儲系統,它使用Go語言編寫,並通過Raft一致性算法處理日誌複製以保證強一致性。目前,Google的容器集群管理系統Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。

Fleet則是一個分佈式的初始化系統。它們之所以選擇使用Go語言,則是因為Go語言對跨平臺的良好支持,以及其背後的強大社區。

Deis(雲服務平臺)

Deis是一個基於Docker和CoreOS的開源PaaS平臺,旨在讓部屬和管理服務器上的應用變得輕鬆容易。它可以運行在AWS、GCE以及Openstack平臺下。

Flynn(雲服務平臺)

Flynn是一個使用Go語言編寫的開源PaaS平臺,可自動構建部署任何應用到Docker容器集群上運行。Flynn項目受到Y Combinator的支持,目前仍在開發中,被稱為是下一代的開源PaaS平臺。

Lime(桌面應用)

相對上面的幾款Go語言在雲端和服務器端之外,Lime則顯得比較特殊。Lime則是一款用Go語言寫的桌面編輯器程序,被看做是著名編輯器Sublime Text的開源實現。

Revel(Web框架)

Revel是一個高生產力的Go語言Web框架。Revel框架支持熱編譯,當編輯、保存和刷新源碼時,Revel會自動編譯代碼和模板;全棧特性,支持路由、參數解析、緩存、測試、國際化等功能。

InfluxDB(分佈式數據庫)

一個Go語音編寫的開源分佈式的時序、事件和指標數據庫,無需外部依賴。其設計目標是實現分佈式和水平伸縮擴展。

Syncthing(雲盤)

一款用Go語言編寫的開源雲存儲和同步服務工具,用戶的數據將由自己完全控制,所有的通信全都加密,每個訪問節點都用加密證書驗證。該項目被認為是Dropbox和 BitTorrent Sync的開源替代,Syncthing之所以選擇Go語言,也是出於跨平臺考慮。

Gogs(自助Git服務)

Gogs則是一款由國人無聞( GitHub)開發的自助Git服務項目。Gogs的目標是打造一個最簡單、最快速和最輕鬆的方式搭建自助Git服務。據作者稱,之所以選擇使用Go語言開發,就是Go允許Gogs可以通過獨立的二進制分發,且對跨平臺有良好支持。

Go後端開發前景

以帝都為例,Go開發工程師的薪水,在隨機樣本中最低為10K,最高去到60,大面積落在20K-40K區間內;

漫談Go語言後端開發

Go目前行業裡主流的就業方向是什麼?

首先,在Web領域,Java/php能做什麼Go就能做什麼,而且更加簡單高效;

在以下場景中,Go尤其凸顯語言優勢:

對效率要求高的場景:比如推薦引擎,要迅速根據大數據分析形成用戶畫像,並生成推薦內容——所以今日頭條的推薦引擎就是用Go來做的;

複雜算法場景:比如大數據排序,以前用C/C++來做,現在可以使用Go來做;

高併發場景:一個Go語言開發的服務端可執行程序能承受百萬級併發,而Java要使用更多的服務器來做負載均衡,這就增加了成本;

分佈式場景:尤其是大規模分佈式場景,或者計劃要加入區塊鏈的服務器節點;

寫在最後

附上一些Go的教程,適合剛入門級別看看,算是福利。關注頭條號,私信回覆“資料”獲取。

漫談Go語言後端開發

相關推薦

推薦中...