Google Go 语言从入门到应用所需要的开源项目

ytlt4385 8年前
   <p> 语言于 2009 年 11 月正式宣布推出,成为开放源代码项目,发展至今已经具有越来越广泛的影响力,今年更是在 TIOBE 编程语言排行榜中跻身 20 强。很多开发者也逐渐将目光投向这门语言,本文整理了部分比较好的学习和应用 Go 语言的开发项目,希望为没有接触过这门语言的开发者们提供一个学习和了解这门语言的途径。</p>    <p>关于 Go 语言:</p>    <p>Go 是 Google 开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。由于其构建简化了并发运行代码的工作,存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。Go语言是基于Inferno操作系统所开发的,并在Linux及Mac OS X平台上进行了实现,后追加 Windows 系统下的实现。</p>    <p>Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。该项目的三位领导者均是著名的 IT 工程师: <strong>Robert Griesemer</strong> ,参与开发 Java HotSpot 虚拟机; <strong>Rob Pike</strong> ,Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言; <strong>Ken Thompson</strong> ,贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开发了 UTF-8 字符集规范。这是一个由计算机领域 “发明之父” 所组成的黄金团队,他们对系统编程语言,操作系统和并行都有着非常深刻的见解。</p>    <h3>一、入门篇</h3>    <p>一本开源的书籍《Go Web编程》《build web application with golang》。书中作者主要分享了Go写web应用的一些东西:</p>    <ul>     <li>对于从php/python/ruby转过来的同学了解go怎么写web应用开发的</li>     <li>对于从c/c++转过来的同学了解web到底是怎么运行起来的</li>    </ul>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/fa534f8be22eb2ece8c1ae9f05b74cda.png" alt="Google Go 语言从入门到应用所需要的开源项目" width="549" height="633"></p>    <p>1. <a href="/misc/goto?guid=4959729307884476869" rel="nofollow,noindex">《The Way to Go》中文版</a></p>    <p>由于目前国内并没有比较好的 Go 语言书籍,而国外的优秀书籍因为英文的缘故在一定程度上也为不少 Go 语言爱好者带来了一些学习上的困扰,尽管《The Way to Go》这本名对目前 Go 语言版本来说有小部分内容相对过时,但是为当下不可多得的好书,部分内容已获得作者同意根据当前 Go 语言版本进行修改。并且以开源的形式免费分享给有需要的 Go 语言爱好者。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/98798545a957fe23a7d95a0c025fe820.png"></p>    <p>​2. 视频语音教程 <a href="/misc/goto?guid=4959729307968069545" rel="nofollow,noindex">《Go 编程基础》</a></p>    <p>《Go 编程基础》是一套针对 Google 出品的Go语言的视频语音教程,主要面向新手级别的学习者。每堂课都会建立一个文件(例如:lecture1.md)作为课堂笔记。课堂笔记中里面包含了该堂课所涵盖的知识点以及知识点开始讲解的时间点,方便学习者快速定位要了解的部分,节省不必要浪费的时间。此外,如果教程中因口误或其它原因使学习者产生迷惑的部分,同样会在课堂笔记中进行补充说明。</p>    <p>3. <a href="/misc/goto?guid=4959729308057694514" rel="nofollow,noindex">Go 的包文档中文翻译</a></p>    <p>这是 Go 语言的标准包和部分第三方包的包文档中文翻译。</p>    <p>项目源码: <a href="/misc/goto?guid=4959729308147544655" rel="nofollow,noindex">http://git.oschina.net/liudiwu/pkgdoc</a> \</p>    <p>在线浏览: <a href="/misc/goto?guid=4959729308232299389" rel="nofollow,noindex">http://mygodoc.oschina.mopaas.com/</a></p>    <h3>二、开发篇</h3>    <p>​0. Go 语言开发工具 <a href="/misc/goto?guid=4959729308313917062" rel="nofollow,noindex"> LiteIDE</a></p>    <p>LiteIDE 是一款开源、跨平台的轻量级Go语言集成开发环境(IDE)。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/ec7ffae7469150eaacd6626c21f280a0.png"></p>    <p>​1. 基于 Web 的团队 Go 语言 <a href="/misc/goto?guid=4959729308398566761" rel="nofollow,noindex">IDE Wide</a></p>    <p>目前较为流行的 Go IDE 都有一些缺陷或遗憾:</p>    <ul>     <li>文本编辑器类(vim/emacs/sublime/Atom 等):对于新手门槛太高,搭建复杂</li>     <li>插件类(goclipse 等):需要原 IDE 支持,不够专业</li>     <li> LiteIDE:界面不够 modern </li>     <li> 没有团队开发体验</li>    </ul>    <p>Go IDE 很少,用 Go 本身开发的 IDE 更是没有,而 Go IDE 这是一个很好的尝试。</p>    <p>在线体验: <a href="/misc/goto?guid=4958858651269503489" rel="nofollow,noindex">https://wide.b3log.org</a></p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/0bba69fecb16b12118f1c24cd64a33a8.png"></p>    <p>​2. Eclipse 的 Go 插件 <a href="/misc/goto?guid=4959729308730758372" rel="nofollow,noindex"> GoClipse</a></p>    <p>GoClipse 是一个为Eclipse平台添加 <a href="/misc/goto?guid=4958524612103456504" rel="nofollow,noindex">Go</a> 语言编程功能的 Eclipse 插件。GoClipse 的目的是为初学者创造一个开发 Go 语言的环境。平台发展比较缓慢,但一直在持续。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/032cd6e576b2a152300c647c22851561.png"></p>    <p>3. 代码编辑器 <a href="/misc/goto?guid=4959729308832006607" rel="nofollow,noindex"> Lime</a></p>    <p>Fredrik Ehnbom 用 <a href="/misc/goto?guid=4958524612103456504" rel="nofollow,noindex">Go</a> 语言开发了新代码编辑器 Lime Text,号称 <a href="/misc/goto?guid=4959729308931099934" rel="nofollow,noindex">Sublime Text</a> 的开源实现。其兼容Sublime Text的快捷键设置,兼容  <a href="/misc/goto?guid=4959729309012388833" rel="nofollow,noindex">Textmate</a> 的颜色主题及语法定义。 Lime Text 的后端采用 Go 实现,前端则使用了 ermbox,Qt (QML) 及 HTML/JavaScript。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/cbf3c792221d8492a9686724d38434a2.png"></p>    <p>​4. Go 的全堆栈 Web 框架 <a href="/misc/goto?guid=4959729309095496140" rel="nofollow,noindex"> Revel</a></p>    <p>Revel 是一个高生产力的 Go 语言 Web 框架,其思路完全来自 Java 的 <a href="/misc/goto?guid=4958329545506648390" rel="nofollow,noindex">Play Framework</a> 。Revel 框架支持热编译,当编辑、保存和刷新 <a href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=458720e1d60a7ee4&k=%D4%B4%C2%EB&k0=%D4%B4%C2%EB&kdi0=0&luki=1&n=10&p=baidu&q=74042097_cpr&rb=0&rs=1&seller_id=1&sid=e47e0ad6e1208745&ssp2=1&stid=0&t=tpclicked3_hc&td=1989498&tu=u1989498&u=http%3A%2F%2Fstudygolang%2Ecom%2Farticles%2F2004&urlid=0" rel="nofollow,noindex">源码</a> 时,Revel 会自动编译代码和模板;全栈特性,支持路由、参数解析、缓存、测试、国际化等功能。</p>    <p>​5. Go 程序调试工具 <a href="/misc/goto?guid=4959729309291276995" rel="nofollow,noindex"> godebug</a></p>    <p>godebug 是一个与众不同的 Go 程序调试工具,传统的编译型语言调试器使用底层系统调用并读取二进制文件用于调试各类符号。使用起来很麻烦而且很难移植。godebug 使用不同的方法,直接把源码作为目标程序,在每一行插入调试代码,然后编译并运行。结果就是一个全功能的调试器,完全可以移植到不同平台。事实上,由于有了 <a href="/misc/goto?guid=4959729309374912722" rel="nofollow,noindex">gopherjs</a> ,你也可以在浏览器上进行调试。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/8dde748d4b35f0ac88f4b0bf5f5b74a5.gif"></p>    <p>​6. Go 测试工具 <a href="/misc/goto?guid=4959729309447945211" rel="nofollow,noindex"> GoConvey</a></p>    <p>GoConvey 是个相当不错的 Go 测试工具,支持 go test。可直接在终端窗口和浏览器上使用。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/f1b0bdde69ce5cbd93d42a87ae112b9c.png"></p>    <h3>三、应用篇</h3>    <p>​0. Linux 容器引擎 <a href="/misc/goto?guid=4959729309520839457" rel="nofollow,noindex"> Docker</a></p>    <p>Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/f591f53218844451a71f04d947ee67ab.png"></p>    <p>1. Redis 集群解决方案 <a href="/misc/goto?guid=4959729309607289024" rel="nofollow,noindex"> Codis</a></p>    <p>Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。目前 豌豆荚 已经在使用该系统。</p>    <p>架构:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/15cdf3df2c5e3c57f6aa276e54648711.png"></p>    <p>​2. 极易搭建的自助 Git 服务 <a href="/misc/goto?guid=4959729309688614799" rel="nofollow,noindex"> Gogs</a></p>    <p>Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/2c9f40b1e258e9c6f799d40fd534e1a3.png"></p>    <p>3 . Go 爬虫软件 <a href="/misc/goto?guid=4959729309766555236" rel="nofollow,noindex"> Pholcus</a></p>    <p>Pholcus(幽灵蛛)是一款纯Go语言编写的支持分布式的高并发、重量级爬虫软件,定位于互联网数据采集,为具备一定 Go 或 JS 编程基础的人提供一个只需关注规则定制的功能强大的爬虫工具。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/2857a97ecf4b3ae383add7347e7112af.png"></p>    <p>​4. Go 应用框架 <a href="/misc/goto?guid=4959729309849869124" rel="nofollow,noindex"> beego</a></p>    <p>beego是一个用Go开发的应用框架,思路来自于 <a href="/misc/goto?guid=4958861999656597950" rel="nofollow,noindex">tornado</a> ,路由设计来源于 <a href="/misc/goto?guid=4958861999759790614" rel="nofollow,noindex">sinatra</a> ,支持如下特性:MVC、REST、智能路由、日志调试、配置管理、模板自动渲染、layout设计、中间件插入逻辑、方便的JSON/XML服务。</p>    <h2 style="text-align: center;"><img src="https://simg.open-open.com/show/07a4a468cab7965343437e8a56efcf58.png"></h2>    <p>​5. 开源消息系统 <a href="/misc/goto?guid=4959729309990059884" rel="nofollow,noindex"> NSQ</a></p>    <p>NSQ 是无中心设计、节点自动注册和发现的开源消息系统。可作为内部通讯框架的基础,易于配置和发布。架构:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/e7c2d63d53f9486acf031c307df86e7f.gif"></p>    <p>6. 时序、事件和指标数据库 <a href="/misc/goto?guid=4959729310070167693" rel="nofollow,noindex"> InfluxDB</a></p>    <p>InfluxDB 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。</p>    <p>7. 开源 PaaS 系统 <a href="/misc/goto?guid=4959729310151617278" rel="nofollow,noindex"> Flynn</a></p>    <p>Flynn 是一个开源的 PaaS 系统,由 <a href="/misc/goto?guid=4958857121215773455" rel="nofollow,noindex">Docker</a> 开发。采用 Go 语言编写。支持数据库包括 Postgres、Redis 和 MongoDB. Flynn 使用完全组件化模块化的设计,任何一个组件和模块都可以独立的进行替换。</p>    <p>开源中国组织翻译的 Flynn 中文文档: <a href="/misc/goto?guid=4959729310259530436" rel="nofollow,noindex">http://flynn.mydoc.io</a></p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/d3b903a531be88cf3ccad38a562a614b.gif"></p>    <p>​8. 容器集群管理系统 <a href="/misc/goto?guid=4959729310346781083" rel="nofollow,noindex"> Kubernetes</a></p>    <p>Kubernetes 是来自 Google 云平台的开源容器集群管理系统。基于 <a href="/misc/goto?guid=4959729309520839457" rel="nofollow,noindex">Docker</a> 构建一个容器的调度服务。该系统可以自动在一个容器集群中选择一个工作容器供使用。其核心概念是 Container Pod。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/15a5fc43afb863557c460fe96c8c267f.jpg"></p>    <p>9. 分布式 SQL 数据库 <a href="/misc/goto?guid=4959729310439242145" rel="nofollow,noindex"> TiDB</a></p>    <p>TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库。其灵感来自于 Google 的 <a href="/misc/goto?guid=4958839589493723924" rel="nofollow,noindex">F1</a> , TiDB 支持包括传统 RDBMS 和 NoSQL 的特性。</p>    <p>TiDB 的源码已经托管在 Git@OSC 上,详情请查看: <a href="/misc/goto?guid=4959729310535258113" rel="nofollow,noindex">http://git.oschina.net/ngaut/tidb</a></p>    <p>架构:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/5c87541c0d2ed2dd4850e690e55e12f6.jpg"></p>    <p>​10. Go 开发的 IM 和推送服务 <a href="/misc/goto?guid=4959729310624571624" rel="nofollow,noindex"> goim</a></p>    <p>goim 是一个支持集群的im及实时推送服务(支持websocket,http和tcp协议)。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/b96875c624f9862138fe81005ec9865f.png"></p>    <p>不过虽然 Go 发展很快,开发者们还是应该根据自己的实际情况选择是否要深入了解这门语言及其应用。如果各位还有其他在学习 Go 语言方面好的开源项目,欢迎在评论区留言,以供学习和交流。</p>    <p> </p>    <p>来自:http://coderknock.com/blog/2016/12/12/Go.html</p>    <p> </p>