Google Go 語言從入門到應用所需要的開源項目
語言于 2009 年 11 月正式宣布推出,成為開放源代碼項目,發展至今已經具有越來越廣泛的影響力,今年更是在 TIOBE 編程語言排行榜中躋身 20 強。很多開發者也逐漸將目光投向這門語言,本文整理了部分比較好的學習和應用 Go 語言的開發項目,希望為沒有接觸過這門語言的開發者們提供一個學習和了解這門語言的途徑。
關于 Go 語言:
Go 是 Google 開發的一種編譯型,并發型,并具有垃圾回收功能的編程語言。由于其構建簡化了并發運行代碼的工作,存在并行編程模式,因此這一語言也被設計用來解決多處理器的任務。Go語言是基于Inferno操作系統所開發的,并在Linux及Mac OS X平臺上進行了實現,后追加 Windows 系統下的實現。
Go 語言起源 2007 年,并于 2009 年正式對外發布。它從 2009 年 9 月 21 日開始作為谷歌公司 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 字符集規范。這是一個由計算機領域 “發明之父” 所組成的黃金團隊,他們對系統編程語言,操作系統和并行都有著非常深刻的見解。
一、入門篇
一本開源的書籍《Go Web編程》《build web application with golang》。書中作者主要分享了Go寫web應用的一些東西:
- 對于從php/python/ruby轉過來的同學了解go怎么寫web應用開發的
- 對于從c/c++轉過來的同學了解web到底是怎么運行起來的
由于目前國內并沒有比較好的 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 語言 IDE 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. 容器集群管理系統 Kubernetes
Kubernetes 是來自 Google 云平臺的開源容器集群管理系統。基于 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 語言方面好的開源項目,歡迎在評論區留言,以供學習和交流。
來自:http://coderknock.com/blog/2016/12/12/Go.html