文档章节

Google Go 语言从入门到应用必备开源项目

两味真火
 两味真火
发布于 2016/12/12 13:05
字数 2555
阅读 8751
收藏 460

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 logo

一、入门篇

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 语言 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 ,你也可以在浏览器上进行调试。

godebug screen capture

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 服务。目前豌豆荚已经在使用该系统。

架构:

Snapshot1

2. 极易搭建的自助 Git 服务 Gogs

Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。

3 . Go 爬虫软件 Pholcus

Pholcus(幽灵蛛)是一款纯Go语言编写的支持分布式的高并发、重量级爬虫软件,定位于互联网数据采集,为具备一定 Go 或 JS 编程基础的人提供一个只需关注规则定制的功能强大的爬虫工具。

image

4. Go 应用框架 beego

beego是一个用Go开发的应用框架,思路来自于tornado,路由设计来源于sinatra,支持如下特性:MVC、REST、智能路由、日志调试、配置管理、模板自动渲染、layout设计、中间件插入逻辑、方便的JSON/XML服务。

5. 开源消息系统 NSQ

NSQ 是无中心设计、节点自动注册和发现的开源消息系统。可作为内部通讯框架的基础,易于配置和发布。架构:

nsqd clients

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

架构:

architecture

10. Go 开发的 IM 和推送服务 goim

goim 是一个支持集群的im及实时推送服务(支持websocket,http和tcp协议)。

不过虽然 Go 发展很快,开发者们还是应该根据自己的实际情况选择是否要深入了解这门语言及其应用。如果各位还有其他在学习 Go 语言方面好的开源项目,欢迎在评论区留言,以供学习和交流。

© 著作权归作者所有

共有 人打赏支持
两味真火

两味真火

粉丝 2630
博文 28
码字总数 40694
作品 0
深圳
运营/编辑
私信 提问
加载中

评论(33)

lemonwater
lemonwater
gogland
人生天地间
人生天地间
jetbrains家好像要出go的IDE了,另外intelliJ IDEA 也有插件
jorion
jorion

引用来自“晴空物语”的评论

ide居然没有vscode
同使用vscode
M
Mr-Yang

引用来自“熊冬根”的评论

IDE还是pycharm加插件最好用

@熊冬根 支持
稻草鸟人
稻草鸟人
说了这么多,尽然没有提到IDEA也是可以写GO的呀
能东棍
能东棍
IDE还是pycharm加插件最好用
温习江湖
温习江湖
这推荐好 low, 几项不是最佳实践。
看风格,应该是刚接触 go 不久
OSC闲人
OSC闲人

引用来自“两味真火”的评论

感谢二哥@成熟的毛毛虫 打赏~
给力
两味真火
两味真火
感谢二哥@成熟的毛毛虫 打赏~
黄者
黄者
WEB 框架可以用 ECHO,国产的 Tango 也不错
IDE 可以用 Visual Studio Code 加 go 插件
Golang资料集

该资源的github地址:Qix 《Platform-native GUI library for Go》 介绍:跨平台的golang GUI库,支持Windows(xp以上),Unix,Mac OS X(Mac OS X 10.7以上) 《Gopm 快速入门》 介绍:Gopm(Go 包管...

ty4z2008
2016/03/11
0
0
JavaEE程序员必读图书大推荐

下面是我根据多年的阅读和实践经验,给您推荐的一些图书: 第一部分: Java语言篇 1 《Java编程规范》 星级: 适合对象:初级,中级 介绍:作者James Gosling(Java之父),所以这本书我觉得...

长平狐
2012/11/12
1K
0
OSChina 技术周刊第二十五期 —— 每周技术精粹

每周技术抢先看,总有你想要的! 移动开发 【翻译】AngularJS 应用访问 Android 手机的照片库 【软件】跨平台移动端开发 NativeScript 【博客】Android Studio建立jni开发环境 【博客】Xamar...

OSC编辑部
2015/03/15
2.6K
3
开源电子书

目录 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 ...

zting科技
2017/12/11
0
0
【干货整理】Docker,从入门说起……

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不...

慕课网官方_运营中心
2018/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IOS  学习记录

1.StackView=>IOS 9及以上支持 2.布局方式: AutoLayout / StackView 堆布局 (线性布局) 3.屏幕适配 (资源分辨率、设计分辨率、屏幕分辨率) Size Class技术 可以针对 屏幕的方向进行设置...

萨x姆
35分钟前
0
0
第四次工业革命:自主经济的崛起

https://36kr.com/p/5170370.html

shengjuntu
昨天
3
0
Cloud Native 与12-Factor

12-Factor(twelve-factor),也称为“十二要素”,是一套流行的应用程序开发原则。Cloud Native架构中使用12-Factor作为设计准则。 12-Factor 的目标在于: 使用标准化流程自动配置,从而使...

waylau
昨天
9
0
java多线程2

“非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在线程安全问题。这是因为方法内部的变量都是私有造成的。 synchronized 获取的都是对象锁。如果多个线程访问多个...

一滴水穿石
昨天
4
0
今天的学习

1,document.location.href:获取整个url 2,str.split(' '):用字符分割字符串 3,$this->load->library(' '):引用图像处理类 4,$this->load->library(' '):引用Email类 5,特殊访问指针$th......

墨冥
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部