(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开发遇到的以下这些问题:
其主要有以下几个方面的痛点:
所以,他们当时设计Go的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性。Go是由那些开发大型系统的人设计的,同时也是为了这些人服务的;它是为了解决工程上的问题,不是为了研究语言设计;它还是为了让我们的编程变得更舒适和方便。
但是结合Google当时内部的一些现实情况,比如:很多工程师都是C系的,所以新设计的语言一定要易学习,最好是C-like的语言;因为有太多的分布式系统和太多的开发者,所以新的语言一定要可以Scale,这包括开发、工程师、代码、部署和依赖;20年没有出新的语言了,所以新设计的语言必须是现代化的(例如内置GC);等等。他们觉得要实现这个目标就需要Go成为一个大家都认可的语言。
最后根据实战经验,他们向着目标设计了Go语言,其主要的特色有:
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语言被称为云计算时代的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语言被称为云计算时代的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/)
四、总结
一个技术能不能发展起来,关键还要看三点。
上述的这三点是非常关键的,新的技术只需要占到其中一到两点就已经很不错了,何况有的技术,比如 Java,是三点全占到了,所以,Java 的发展是如此好。当然,除了上面这三点重要的,还有一些其它的影响因素,比如:
用这些标尺来量一下 Go 语言,Go 语言的优势如下:
所以,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 Web编程实战派——从入门到精通》
廖显东 著
(扫码了解本书详情)
如果喜欢本文欢迎 在看丨留言丨分享至朋友圈 三连
热文推荐
你的烂代码终于有了解决方案!
BPF 之巅:洞悉 Linux 系统和应用性能
拍立淘创始人为你揭开“以图搜图”的神秘面纱!
图神经网络在生化医疗方面的相关应用
▼点击阅读原文,获取本书详情~
本文分享自 博文视点Broadview 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!