這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Go 語言於 2009 年 11 月正式宣布推出,成為開放原始碼項目,發展至今已經具有越來越廣泛的影響力,今年更是在 TIOBE 程式設計語言熱門排行榜中躋身 20 強。很多開發人員也逐漸將目光投向這門語言,本文整理了部分比較好的學習和應用 Go 語言的開發項目,希望為沒有接觸過這門語言的開發人員們提供一個學習和瞭解這門語言的途徑。
關於 Go 語言:
Go 是 Google 開發的一種編譯型,並髮型,並具有記憶體回收功能的程式設計語言。由於其構建簡化了並發運行代碼的工作,存在並行編程模式,因此這一語言也被設計用來解決多處理器的任務。Go語言是基於Inferno作業系統所開發的,並在Linux及Mac OS X平台上進行了實現,後追加 Windows 系統下的實現。
Go 語言起源 2007 年,並於 2009 年正式對外發布。它從 2009 年 9 月 21 日開始作為Google公司 20% 兼職項目,即相關員工利用 20% 的空餘時間來參與 Go 語言的研發工作。該項目的三位領導者均是著名的 IT 工程師:Robert Griesemer,參與開發 Java HotSpot 虛擬機器;Rob Pike,Go 語言項目總負責人,貝爾實驗室 Unix 團隊成員,參與的項目包括 Plan 9,Inferno 作業系統和 Limbo 程式設計語言;Ken Thompson,貝爾實驗室 Unix 團隊成員,C 語言、Unix 和 Plan 9 的創始人之一,與 Rob Pike 共同開發了 UTF-8 字元集規範。這是一個由電腦領域 “發明之父” 所組成的黃金團隊,他們對系統程式設計語言,作業系統和並行都有著非常深刻的見解。
一、入門篇
0. 開源圖書 《Go Web編程》
一本開源的書籍《Go Web編程》《build web application with golang》。書中作者主要分享了Go寫web應用的一些東西:
- 對於從php/python/ruby轉過來的同學瞭解go怎麼寫web應用開發的
- 對於從c/c++轉過來的同學瞭解web到底是怎麼運行起來的
1.《The Way to Go》中文版
由於目前國內並沒有比較好的 Go 語言書籍,而國外的優秀書籍因為英文的緣故在一定程度上也為不少 Go 語言愛好者帶來了一些學習上的困擾,儘管《The Way to Go》這本名對目前 Go 語言版本來說有小部分內容相對過時,但是為當下不可多得的好書,部分內容已獲得作者同意根據當前 Go 語言版本進行修改。並且以開源的形式免費分享給有需要的 Go 語言愛好者。
2. 視頻語音教程《Go 編程基礎》
《Go 編程基礎》是一套針對 Google 出品的Go語言的視頻語音教程,主要面向新手層級的學習者。每堂課都會建立一個檔案(例如:lecture1.md)作為課堂筆記。課堂筆記中裡麵包含了該堂課所涵蓋的知識點以及知識點開始講解的時間點,方便學習者快速定位要瞭解的部分,節省不必要浪費的時間。此外,如果教程中因口誤或其它原因使學習者產生迷惑的部分,同樣會在課堂筆記中進行補充說明。
3.Go 的包文檔中文翻譯
這是 Go 語言的標準包和部分第三方包的包文檔中文翻譯。
項目源碼:http://git.oschina.net/liudiwu/pkgdoc
線上瀏覽:http://mygodoc.oschina.mopaas.com/
二、開發篇
0. Go 語言開發工具 LiteIDE
LiteIDE 是一款開源、跨平台的輕量級Go語言整合式開發環境(IDE)。
1. 基於 Web 的團隊 Go 語言識別碼E Wide
目前較為流行的 Go IDE 都有一些缺陷或遺憾:
- 文字編輯器類(vim/emacs/sublime/Atom 等):對於新手門檻太高,搭建複雜
- 外掛程式類(goclipse 等):需要原 IDE 支援,不夠專業
- LiteIDE:介面不夠 modern
- 沒有團隊開發體驗
Go IDE 很少,用 Go 本身開發的 IDE 更是沒有,而 Go IDE 這是一個很好的嘗試。
線上體驗:https://wide.b3log.org
2. Eclipse 的 Go 外掛程式 GoClipse
GoClipse 是一個為Eclipse平台添加 Go 語言編程功能的 Eclipse 外掛程式。GoClipse 的目的是為初學者創造一個開發 Go 語言的環境。平台發展比較緩慢,但一直在持續。
3. 代碼編輯器 Lime
Fredrik Ehnbom 用 Go 語言開發了新代碼編輯器 Lime Text,號稱Sublime Text 的開源實現。其相容Sublime Text的快速鍵設定,相容 Textmate 的顏色主題及文法定義。 Lime Text 的後端採用 Go 實現,前端則使用了 ermbox,Qt (QML) 及 HTML/JavaScript。
4. Go 的全堆棧 Web 架構 Revel
Revel 是一個高生產力的 Go 語言 Web 架構,其思路完全來自 Java 的 Play Framework。Revel 架構支援熱編譯,當編輯、儲存和重新整理源碼時,Revel 會自動編譯代碼和模板;全棧特性,支援路由、參數解析、緩衝、測試、國際化等功能。
5. Go 程式調試工具 godebug
godebug 是一個與眾不同的 Go 程式調試工具,傳統的編譯型語言調試器使用底層系統調用並讀取二進位檔案用於調試各類符號。使用起來很麻煩而且很難移植。godebug 使用不同的方法,直接把源碼作為目標程式,在每一行插入調試代碼,然後編譯並運行。結果就是一個全功能的調試器,完全可以移植到不同平台。事實上,由於有了 gopherjs ,你也可以在瀏覽器上進行調試。
6. Go 測試載入器 GoConvey
GoConvey 是個相當不錯的 Go 測試載入器,支援 go test。可直接在終端視窗和瀏覽器上使用。
三、應用篇
0. Linux 容器引擎 Docker
Docker 是一個開源的應用程式容器引擎,讓開發人員可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app)。幾乎沒有效能開銷,可以很容易地在機器和資料中心中運行。最重要的是,他們不依賴於任何語言、架構或封裝系統。
1. Redis 叢集解決方案 Codis
Codis 是一個分布式 Redis 解決方案, 對於上層的應用來說, 串連到 Codis Proxy 和串連原生的 Redis Server 沒有明顯的區別 (不支援的命令列表), 上層應用可以像使用單機的 Redis 一樣使用, Codis 底層會處理請求的轉寄, 不停機的資料移轉等工作, 所有後邊的一切事情, 對於前面的用戶端來說是透明的, 可以簡單的認為後邊串連的是一個記憶體無限大的 Redis 服務。目前豌豆莢已經在使用該系統。
架構:
2. 極易搭建的自助 Git 服務 Gogs
Gogs 的目標是打造一個最簡單、最快速和最輕鬆的方式搭建自助 Git 服務。使用 Go 語言開發使得 Gogs 能夠通過獨立的二進位分發,並且支援 Go 語言支援的所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。
3 . Go 爬蟲軟體 Pholcus
Pholcus(幽靈蛛)是一款純Go語言編寫的支援分布式的高並發、重量級爬蟲軟體,定位於互連網資料擷取,為具備一定 Go 或 JS 編程基礎的人提供一個只需關注規則定製的功能強大的爬蟲工具。
4. Go 應用程式框架 beego
beego是一個用Go開發的應用程式框架,思路來自於tornado,路由設計來源於sinatra,支援如下特性:MVC、REST、智能路由、日誌調試、組態管理、模板自動渲染、layout設計、中介軟體插入邏輯、方便的JSON/XML服務。
5. 開源訊息系統 NSQ
NSQ 是無中心設計、節點自動註冊和發現的開源訊息系統。可作為內部通訊架構的基礎,易於配置和發布。架構:
6. 時序、事件和指標資料庫 InfluxDB
InfluxDB 是一個開源分布式時序、事件和指標資料庫。使用 Go 語言編寫,無需外部依賴。其設計目標是實現分布式和水平伸縮擴充。
7. 開源 PaaS 系統 Flynn
Flynn 是一個開源的 PaaS 系統,由 Docker 開發。採用 Go 語言編寫。支援資料庫包括 Postgres、Redis 和 MongoDB. Flynn 使用完全組件化模組化的設計,任何一個組件和模組都可以獨立的進行替換。
開源中國組織翻譯的 Flynn 中文文檔:http://flynn.mydoc.io
8. Lark系統 Kubernetes
Kubernetes 是來自 Google 雲平台的開源Lark系統。基於 Docker 構建一個容器的調度服務。該系統可以自動在一個容器叢集中選擇一個工作容器供使用。其核心概念是 Container Pod。
9. 分布式 SQL 資料庫 TiDB
TiDB 是國內 PingCAP 團隊開發的一個分布式 SQL 資料庫。其靈感來自於 Google 的 F1, TiDB 支援包括傳統 RDBMS 和 NoSQL 的特性。
TiDB 的源碼已經託管在 Git@OSC 上,詳情請查看:http://git.oschina.net/ngaut/tidb
架構:
10. Go 開發的 IM 和推送服務 goim
goim 是一個支援叢集的im及即時推送服務(支援websocket,http和tcp協議)。
不過雖然 Go 發展很快,開發人員們還是應該根據自己的實際情況選擇是否要深入瞭解這門語言及其應用。如果各位還有其他在學習 Go 語言方面好的開源項目,歡迎在評論區留言,以供學習和交流。