一、Go语言出现之前的编程痛点
(1)为什么会设计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语言,其主要的特色有:
•没有继承的OO;
•强一致类型;
•Interface但是不需要显示声明(Duck Type);
•Function 和Method;
•没有异常处理(Error is value);
•基于首字母的可访问特性;
•不用的Import或者变量引起编译错误;
•完整而卓越的标准库包。
Go语言发布之后,很多公司特别是云计算公司开始用Go重构他们的基础架构,很多都是直接采用Go进行了开发。这几年火到爆的Docker、Kubernetes就是采用Go开发的。
(2)Go主要应用的领域。
上面那些基本上就是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云平台。
(3)为什么选择使用Go语言?
国内很多云创业公司都会选择把Go作为首要语言,例如七牛云等。为什么会选择Go呢?与其他语言的应用相比,它有什么优点呢?
①简单,学习曲线平稳;
②极致效率;
③Google公司开发;
④自由高效:组合的思想、无侵入式的接口;
⑤强大的标准库;
⑥部署方便:二进制文件、Copy部署;
⑦简单而强大的并发处理能力;
⑧规范,不会写出垃圾代码;
二、Go语言Web编程的优势
通过上面的介绍我们知道,Go语言Web开发领域有得天独厚的优势!Go语言被称为云计算时代的C语言。我们知道,在Web开发的世界里,敏捷才是王道。
谁能使用更少的费用和资源来更快地完成网站和网络应用,谁就能获得更多的竞争优势。
此外,对于编程者而言,不仅希望快速完成Web开发,对可用性和用户体验的要求也很高。
让我们看一下Python的特性,以及为什么它能够成为Web开发领域的主流。
(1)Python vs Go语言:优点与缺点
Go语言现在被认为是Python、Java等传统语言的替代品,关于Go语言 Web开发与Python、Java的讨论不胜枚举。
虽然简单是Python的主要优点,但也有一些缺点。许多开发人员发现,虽然对于一些简单和基本的开发Python很实用,但如果要构建更复杂的系统和定制模块,使用Python可能会变得很复杂。此外,经常出现令人沮丧的编码错误。
在HekReNo.com的文章“从Python转到Go语言的五个原因”中,Tigran Bayburstyan说:“Python是一门伟大而有趣的语言,但有时你会遇到异常,因为你试图使用一个变量作为一个整数,但事实证明它是一个字符串。”Go会让你在编译时消除这些问题。
总而言之,在许多用例中,Go语言 Web开发已被证明比Python能更快地完成同一类任务。
(2)Python vs Go语言:哪一个更好?
那么,Go语言是否会在不久的将来取代Python呢?开发者社区正在讨论两种编程语言的优缺点。如果您正在寻找用于Web编程、移动开发、微服务和ERP系统的强大工具,我们相信,您应该切换到Go语言的原因是:
①简单性;
②高级编译能力;
③并发和性能;
④框架和库的本地支持
⑤顶级IDE和调试;
⑥清晰的语法;
另一个有助于Go语言 Web编程出色的简单性和易用性的是其清晰的语法,它包含零不必要的组件。Go是建立在实用的头脑中的:而不是必须深入研究语言结构,开发者现在可以自由地专注于开发本身。
总结,通过上面的对比我们发现,Go语言在各方面基本都已经超过Python,尽管Python社区仍然超过Gophers,但Go倡导者的数量每天都在增加,相信Go语言接近并超过Python、Java是大势所趋。
三、Go语言Web开发常用框架
Go语言被称为云计算时代的C语言,它以其独特的优势逐渐被越来越多的公司所关注和使用。为了充分利用Go语言的Web开发优势,有必要熟悉一下Go语言的Web框架。
四、总结
一个技术能不能发展起来,关键还要看三点。
•有没有一个比较好的社区。像 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 语言解决了并发编程和写底层应用开发效率的痛点;
•Go 语言有 Google 这个世界一流的技术公司在后面;
•Go 语言的杀手级应用是 Docker,而 Dockercfda的生态圈在这几年完全爆棚了。
所以,Go 语言的未来是不可限量的。当然,我个人觉得,Go 可能会吞食很多 C、C++、Java 的项目。不过,Go 语言所蚕食的主要项目应该是中间层的项目,也就是Web开发相关的项目,既不是非常底层也不会是业务层。
也就是说,Go 语言不会吞食底层到 C 和 C++ 那个级别的,也不会吞食到高层如 Java 业务层的项目。Go 语言能吞食的一定是 PaaS 上的项目,比如一些消息缓存中间件、服务发现、服务代理、控制系统、Agent、日志收集等等,没有复杂的业务场景,也到不了特别底层(如操作系统)的中间平台层的软件项目或工具。而 C 和 C++ 会被打到更底层,Java 会被打到更上层的业务层。
Go语言的应用范围一直在扩大,云计算,微服务,区块链,哪里都有用Go写的重量级项目。Docker/Kubernetes生态圈,几百/千万行代码,基本统治了云原生应用市场。同时Go语言未来会统治Web开发,成为Web开发领域的领头羊。