一、Go语言出现之前的编程痛点
我们先来了解一下Go语言的作者和主要核心开发者们:Rob Pike:曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8 字元编码。Ken Thompson:主要是B语言、C语言的作者,Unix之父。1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technology)得主。他与Dennis Ritchie是Unix的原创者。Thompson也发明了后来衍生出C语言的B程序语言。Robert Griesemer:在开发Go之前是Google V8、Chubby和HotSpot JVM的主要贡献者。设计Go语言是为了解决当时Google开发遇到的以下这些问题:- 大量的C++代码,同时又引入了Java和Python;
所以,他们当时设计Go的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性。Go是由那些开发大型系统的人设计的,同时也是为了这些人服务的;它是为了解决工程上的问题,不是为了研究语言设计;它还是为了让我们的编程变得更舒适和方便。但是结合Google当时内部的一些现实情况,比如:很多工程师都是C系的,所以新设计的语言一定要易学习,最好是C-like的语言;因为有太多的分布式系统和太多的开发者,所以新的语言一定要可以Scale,这包括开发、工程师、代码、部署和依赖;20年没有出新的语言了,所以新设计的语言必须是现代化的(例如内置GC);等等。他们觉得要实现这个目标就需要Go成为一个大家都认可的语言。最后根据实战经验,他们向着目标设计了Go语言,其主要的特色有:- Interface但是不需要显示声明(Duck Type);
Go语言发布之后,很多公司特别是云计算公司开始用Go重构他们的基础架构,很多都是直接采用Go进行了开发。这几年火到爆的Docker、Kubernetes就是采用Go开发的。 上面那些基本上就是Go的历史背景和设计初衷,那么目前Go主要应用于哪些系统呢?①Web服务器编程,以前使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。②容器开发:Docker,使开发高效且可预测;Kubernetes,也称为K8s,是一个开源系统,用于自动化容器化应用程序的部署、扩展和管理。③微服务、分布式系统、数据库代理器等,例如gRPC、Etcd等。④Web网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包足够强大,基本涵盖了常用的Web应用方法。⑤数据库,前一段时间Google开发的Groupcache、Couchbase的部分组件、Tidb、Cockroachdb、Influxdb等。⑥云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的Apcera云平台。国内很多云创业公司都会选择把Go作为首要语言,例如七牛云等。为什么会选择Go呢?与其他语言的应用相比,它有什么优点呢?二、Go语言Web编程的优势
通过上面的介绍我们知道,Go语言Web开发领域有得天独厚的优势!Go语言被称为云计算时代的C语言。我们知道,在Web开发的世界里,敏捷才是王道。谁能使用更少的费用和资源来更快地完成网站和网络应用,谁就能获得更多的竞争优势。此外,对于编程者而言,不仅希望快速完成Web开发,对可用性和用户体验的要求也很高。让我们看一下Python的特性,以及为什么它能够成为Web开发领域的主流。Go语言现在被认为是Python、Java等传统语言的替代品,关于Go语言 Web开发与Python、Java的讨论不胜枚举。虽然简单是Python的主要优点,但也有一些缺点。许多开发人员发现,虽然对于一些简单和基本的开发Python很实用,但如果要构建更复杂的系统和定制模块,使用Python可能会变得很复杂。此外,经常出现令人沮丧的编码错误。在HekReNo.com的文章“从Python转到Go语言的五个原因”中,Tigran Bayburstyan说:“Python是一门伟大而有趣的语言,但有时你会遇到异常,因为你试图使用一个变量作为一个整数,但事实证明它是一个字符串。”Go会让你在编译时消除这些问题。总而言之,在许多用例中,Go语言 Web开发已被证明比Python能更快地完成同一类任务。那么,Go语言是否会在不久的将来取代Python呢?开发者社区正在讨论两种编程语言的优缺点。如果您正在寻找用于Web编程、移动开发、微服务和ERP系统的强大工具,我们相信,您应该切换到Go语言的原因是:另一个有助于Go语言 Web编程出色的简单性和易用性的是其清晰的语法,它包含零不必要的组件。Go是建立在实用的头脑中的:而不是必须深入研究语言结构,开发者现在可以自由地专注于开发本身。总结,通过上面的对比我们发现,Go语言在各方面基本都已经超过Python,尽管Python社区仍然超过Gophers,但Go倡导者的数量每天都在增加,相信Go语言接近并超过Python、Java是大势所趋。三、Go语言Web开发常用框架
Go语言被称为云计算时代的C语言,它以其独特的优势逐渐被越来越多的公司所关注和使用。为了充分利用Go语言的Web开发优势,有必要熟悉一下Go语言的Web框架。(1)Beego (http://beego.me/)(2)Gin(https://gin-gonic.github.io/gin/)(3)Revel(http://revel.github.io/)(4)Martini (http://martini.codegangsta.io)(5)Goji(https://goji.io/)- 有没有一个比较好的社区。像 C、C++、Java、Python 和 JavaScript 的生态圈都是非常丰富和火爆的。尤其是有很多商业机构参与的社区那就更为人气爆棚了,比如 Linux 的社区。
- 有没有一个工业化的标准。像 C、C++、Java 都是有标准化组织的。尤其是 Java,其在架构上还搞出了像 J2EE 这样的企业级标准。
- 有没有一个或多个杀手级应用。C、C++ 和 Java 的杀手级应用不用多说了,就算是对于 PHP 这样还不能算是一个好的编程语言来说,因为是 Linux 时代的第一个杀手级解决方案 LAMP 中的关键技术,所以,也发展起来了。
上述的这三点是非常关键的,新的技术只需要占到其中一到两点就已经很不错了,何况有的技术,比如 Java,是三点全占到了,所以,Java 的发展是如此好。当然,除了上面这三点重要的,还有一些其它的影响因素,比如:- 学习曲线是否低,上手是否快。这点非常重要,C++ 在这点上越做越不好了。
- 有没有一个不错的提高开发效率的开发框架。如:Java 的 Spring 框架,C++ 的 STL 等。
- 是否有一个或多个巨型的技术公司作为后盾。如:Java 和 Linux 后面的 IBM、Sun……
- 有没有解决软件开发中的痛点。如:Java 解决了 C 和 C++ 的内存管理问题。
用这些标尺来量一下 Go 语言,Go 语言的优势如下:- Go 语言解决了并发编程和写底层应用开发效率的痛点;
- Go 语言有 Google 这个世界一流的技术公司在后面;
- Go 语言的杀手级应用是 Docker,而 Docker 的生态圈在这几年完全爆棚了。
所以,Go 语言的未来是不可限量的。当然,我个人觉得,Go 可能会吞食很多 C、C++、Java 的项目。不过,Go 语言所蚕食的主要项目应该是中间层的项目,也就是Web开发相关的项目,既不是非常底层也不会是业务层。也就是说,Go 语言不会吞食底层到 C 和 C++ 那个级别的,也不会吞食到高层如 Java 业务层的项目。Go 语言能吞食的一定是 PaaS 上的项目,比如一些消息缓存中间件、服务发现、服务代理、控制系统、Agent、日志收集等等,没有复杂的业务场景,也到不了特别底层(如操作系统)的中间平台层的软件项目或工具。而 C 和 C++ 会被打到更底层,Java 会被打到更上层的业务层。Go语言的应用范围一直在扩大,云计算,微服务,区块链,哪里都有用Go写的重量级项目。Docker/Kubernetes生态圈,几百/千万行代码,基本统治了云原生应用市场。同时Go语言未来会统治Web开发,成为Web开发领域的领头羊。- 零基础入门,循序渐进,实现快速从菜鸟向实战派高手迈进!
本书采用当前Go最新版本编写,以极客思维、深入Go语言底层进行探究,帮助读者了解背后原理。全书言简意赅,以帮助读者提升开发效率为导向,同时尽可能帮助读者缩短阅读本书的时间。
本书拒绝纯理论,直接实战!绝大部分实例代码都是来自于最新的企业实战项目,所有的示例代码,拿来即可运行。