共计 7483 个字符,预计需要花费 19 分钟才能阅读完成。
1.Go 语言之前编程的痛点
(1)为什么会设计 Go 语言?
咱们先来理解一下 Go 的作者和次要外围开发者们:Robert Griesemer, Rob Pike 和 Ken Thompson。设计 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 开发的。咱们来看看目前为止采纳 Go 的一些国内外公司,国外的如 Google、Docker、Apple、Cloud Foundry、CloudFlare、Couchbase、CoreOS、Dropbox、MongoDB、AWS 等公司,国内的如阿里云 CDN、百度、小米、七牛云、PingCAP、华为、金山软件、猎豹挪动、饿了么等公司。
(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 呢?与其余语言的利用相比,它有什么长处呢?
①简略,学习曲线安稳;
它蕴含了类 C 语法、GC 内置和工程工具。这一点十分重要,因为 Go 语言容易学习,所以一个一般的大学生花一个星期就能写进去能够上手的、高性能的利用。在国内大家都谋求快,这也是为什么国内 Go 风行的起因之一。
②极致效率;
Go 领有靠近 C 的运行效率和靠近 PHP 的开发效率,这就很无利的撑持了下面大家谋求疾速的需要。
③Google 公司开发;
之所以说 Go 出身名门,是因为咱们晓得 Go 语言出自 Google 公司,这个公司在业界的知名度和实力天然不必多说。Google 公司汇集了一批牛人,在各种编程语言称雄争霸的场面下推出新的编程语言,天然有它的策略思考。而且从 Go 语言的倒退态势来看,Google 对它这个新的宠儿还是很看重的,Go 天然有一个良好的发展前途。咱们看看 Go 语言的次要创造者,血统纯正这点就可见端倪了。
④自在高效:组合的思维、无侵入式的接口;
Go 语言能够说是开发效率和运行效率二者的完满交融,天生的并发编程反对。Go 语言反对以后所有的编程范式,包含过程式编程、面向对象编程以及函数式编程。程序员们能够各取所需、自由组合、想怎么玩就怎么玩。
⑤弱小的规范库;
这包含互联网利用、零碎编程和网络编程。Go 外面的规范库基本上曾经是十分稳固了,特地是我这里提到的三个,网络层、零碎层的库十分实用。
⑥部署不便:二进制文件、Copy 部署;
这一点是很多人抉择 Go 的最大理由,因为部署太不便了,所以当初也有很多人用 Go 开发运维程序。
⑦简略而弱小的并发解决能力;
它蕴含了升高心智的并发和繁难的数据同步,我感觉这是 Go 最大的特色。之所以写正确的并发、容错和可扩大的程序如此之难,是因为咱们用了谬误的工具和谬误的形象,Go 能够说这一块做的相当简略。
⑧标准,不会写出垃圾代码;
Go 领有弱小的编译查看、严格的编码标准和残缺的软件生命周期工具,具备很强的稳定性,稳固压倒一切。那么为什么 Go 相比于其余程序会更稳固呢?这是因为 Go 提供了软件生命周期(开发、测试、部署、保护等等)的各个环节的工具,如 go tool、gofmt、go test 等。
2.Go 语言 Web 编程的劣势
通过下面的介绍咱们晓得,Go 语言 Web 开发畛域有得天独厚的劣势!Go 语言被称为云计算时代的 C 语言。咱们晓得,在 Web 开发的世界里,麻利才是王道。谁能应用更少的费用和资源来更快地实现网站和网络应用,谁就取得更多的竞争劣势。此外,对于编程者而言,不仅心愿疾速实现 Web 开发,对可用性和用户体验的要求也很高。
这须要开发更多的性能和高级编程语言来开发网站性能,例如 Go 语言。本文着重介绍了 Go 语言 Web 开发的益处,并将 Go 语言 Web 编程与其余高度风行的语言进行了比拟,例如 Python。
让咱们看一下 Python 的个性,以及为什么它可能成为 Web 开发畛域的支流。
(1)Python vs Go 语言:长处与毛病
Python 自 20 世纪 80 年代就呈现了,但直到近些年它才变得风行。事实上,Python 受欢迎水平曾经间断 6 年增长,当初是最罕用的编程语言之一。在 Web 开发中,它次要用于后端编程,但它也用于前端工作。最终,Python 在 Web 开发场景中占优势的次要起因是它帮忙开发人员解决敏捷性的迫切需要。它易于学习,简略易用,有助于疾速实现简单的指标。Python 是灵便的,语法也很简略。
Go 语言当初被认为是 Python、Java 等传统语言的替代品,对于 Go 语言 Web 开发与 Python、Java 的探讨举不胜举。
尽管简略是 Python 的次要长处,但也有一些毛病。许多开发人员发现,尽管对于一些简略和根本的开发 Python 很实用,但如果要构建更简单的零碎和定制模块,应用 Python 可能会变得很简单。此外,经常出现令人丧气的编码谬误。在 HekReNo.com 文章中“从 Python 转到 Go 语言的五个起因”Tigran Bayburstyan 说:“Python 是一个平凡而乏味的语言,但有时你会遇到异样,因为你试图应用一个变量作为一个整数,但事实证明它是一个字符串。”Go 会让你在编译时打消这些问题。
总而言之,在许多用例中,Go 语言 Web 开发已被证实比应用 Python 更快地实现同一类工作。最终,Go 语言是为那些想要实现工作的人疾速而无效地实现工作,而不须要进入编程语言的奥妙之处。
(2)Python vs Go 语言:哪一个更好?
那么,Go 语言是否会在不久的未来取代 Python 呢?开发者社区正在探讨两种编程语言的优缺点。如果您正在寻找用于 Web 编程、挪动开发、微服务和 ERP 零碎的弱小工具,咱们置信,您应该切换到 Go 语言的起因是:
①简略性;
如果 Python 是迄今为止最容易学习的编程语言,那么 Go 语言甚至更简略。学习 Go 语言要比学习 Python 快得多。一些开发人员宣称 Go 语言简直和 JavaScript 一样简略。
②高级编译能力;
Go 语言是一个编译执行语言,它可能间接将代码编译成可执行的二级制机器码。Go 语言动态地将所有依赖库和模块编译到到一个二进制文件中。你不再须要在服务器上安装任何依赖项——你所须要做的就是上传一个编译的文件,你的利用就能够简略的运行了。
③并发和性能;
Go 语言并发模型可能确保更高的性能(性能甚至 2x、3x 的晋升)。大多数古代编程语言都反对并发,然而 Go 语言采纳了更节俭资源的办法。绝对于 Python,Go 语言提供更高性能的 goroutine 模型来反对多线程,goroutine 可能更加节俭 CPU 和内存资源。所以 Go 语言更有助于降低成本和资源。
④框架和库的本地反对;
Go 语言 sdk 包提供了功能丰富的 API,因而不必过多的依赖第三方库就能很好的应用 Go 语言。当然,如果你需要的话,你能够下载很多工具和框架(Go 语言四周的社区曾经很弱小很欠缺了),然而罕用的 API 都曾经内置到 Go 语言外围库中了。这样能够放慢整个 Go 语言 Web 开发过程的速度,并且使您无需寻找任何第三方依赖。
⑤顶级 IDE 和调试;
Go 语言创作者在创立具备先进调试工具和插件的最先进的集成开发环境方面 做得很好。这能够说是编程中最要害的方面,因为 IDE 会重大妨碍或减速开发过程。明天,当敏捷性给软件公司带来竞争劣势时,平凡的 IDE 和调试工具是一个十分重要的劣势。
⑥清晰的语法;
另一个有助于 Go 语言 Web 编程杰出的简略性和易用性的是其清晰的语法,它蕴含零不必要的组件。Go 是建设在实用的头脑中的:而不是必须深入研究语言构造,开发者当初能够自在地专一于开发自身。
总结,通过下面的比照咱们发现,Go 语言在各方面根本都曾经超过 Python,只管 Python 社区依然超过 Gophers,Go 倡导者的数量每天都在减少,置信 Go 语言靠近并超过 Python、Java 是大势所趋。
有了充沛的理由,Go 语言证实了“先进”不再等同于简单、迟缓和低廉。咱们能够在不就义品质和大量投资的状况下实现显著的开发速度。此外,如果你决定应用 Go,那么曾经有许多 Go 语言网络框架供你抉择。
3.Go 语言 Web 开发罕用框架
Go 语言被称为云计算时代的 C 语言,它以其独特的劣势逐步被越来越多的公司所关注和应用。为了充分利用 Go 语言的 Web 开发劣势,有必要相熟一下 Go 语言的 Web 框架。
(1)Beego(http://beego.me/)
Beego 是一个齐全的 MVC 框架,你能够应用你的 Go 语言业余技术构建你的 web 应用程序。Beego 是用 Go 语言开发的高效的 HTTP 框架,能够用来疾速开发 API、Web 利用及后端服务等各种利用。Beego 是一个 RESTful 的框架,次要设计灵感来源于 tornado、sinatra 和 flask 这三个框架。它还联合了 Go 语言本身的一些个性(接口、构造体嵌入等)。
1)Beego 架构简介。
Beego 是基于多个独立模块构建的,是一个高度解耦的框架。最后在设计 Beego 时就思考到了性能模块化,用户即便不实用 Beego 的 HTTP 逻辑,也能够独立应用这些模块(例如能够应用 cache 模块来解决的缓存逻辑,应用日志模块来记录操作信息,应用 config 模块来解析各种格局的文件)。
Beego 各模块的性能,以及应用办法会在接下来逐个介绍。
2)Beego 执行逻辑。
既然 Beego 是基于模块构建的,那么它的执行逻辑是怎么样的呢?Beego 是一个典型的 MVC 框架.
执行逻辑能够拆分以下几段:
①main 文件监听启动端口接管申请。
②申请通过路由和参数过滤性能被转发给绑定 URL 的控制器解决。
③控制器(Controller)调用辅助工具包、Model、Session 治理、日志解决、缓存解决模块进行相应的业务解决。其中,模型(Model)通过 ORM 间接操作数据库。
④业务解决实现,返回响应或视图(View)给申请方。
(2)Gin(https://gin-gonic.github.io/g…
Gin 是一个基于 Go 语言编写的 Web 框架。Gin 框架领有很好的性能,其借助高性能的 httprouter,运行速度失去了极大晋升。目前的 Gin 框架是 1.x 版本。
①装置。
下载并装置 Gin:
$ go get -u github.com/gin-gonic/gin
②第一个 Gin 示例。
装置实现后,让咱们开启 Gin 之旅。
package main
import (
“github.com/gin-gonic/gin”
)
func main() {
// 创立一个默认的路由引擎
r := gin.Default()
// GET:申请形式;/hello:申请的门路
// 当客户端以 GET 办法申请 /hello 门路时,会执行前面的匿名函数
r.GET(“/hello”, func(c *gin.Context) {
// c.JSON:返回 JSON 格局的数据
c.JSON(200, gin.H{
“message”: “Hello world!”,
})
})
// 启动 HTTP 服务,默认在 0.0.0.0:8080 启动服务
r.Run()
}
运行以上代码,而后应用浏览器关上 127.0.0.1:8080/hello 即可看到一串 JSON 字符串。
(3)Revel(http://revel.github.io/)
Revel 能让 Go 语言的 web 开发锦上添花,大大提高你的开发效率。
(4)Martini (http://martini.codegangsta.io)
Martini 是一个受到 Sinatra (一个 Ruby 框架)启发而开发的 Go 语言 web 框架。应用 Martini,你能够疾速写你的模块化利用或者服务。
(5)Traffic(https://github.com/pilu/traff…
Traffic 同样也是受 Sinatra 的 regexp/pattern 互斥思维启发下开发的 web 框架。它是一个小框架,并且是轻量型的。因而,它具备很好的灵活性,扩展性。
(6)Goji(https://goji.io/)
Goji 是一个轻量型的 web 框架,具备简洁性和灵活性的多路路由申请个性,正如它所标榜本人的那样。
4.Go 语言 Web 编程书籍
(1)《Go Web 编程实战派从入门到精通》廖显东 著 2021 年 4 月出版
京东购买链接:https://item.jd.com/13200972….
当当购买链接:http://product.dangdang.com/2…
进入京东或者当当,输出“Go Web 编程实战派”购买吧!
本书采纳 Go 最新版本编写,回绝纯理论,间接实战!实战!实战!重要的事说 3 遍!本书聚焦 Go Web 开发畛域,对 Go Web 常识进行全面深刻地解说。货真价实高质量精品图书!本书有如下特色:
①一线技术,突出实战;
本书以实战为外围,贯通整本书。所有代码采纳 Go 最新版本编写。
②精雕细琢,浏览性强;
全书的语言通过屡次打磨,力求准确。同时重视浏览体验,让没有任何根底的读者也能够很轻松的读懂书中的常识。
③零根底入门,循序渐进,实现疾速从菜鸟向实战派高手迈进;
本书以 Go 入门级程序员为次要对象,初、中、高级程序员都能够从书中学到干货。先从 Go 的根底学起,而后学习 Go 外围的技术,再学 Go 的高级利用,而后再进行我的项目实战,最初介绍应用程序的 Docker 实战部署。全书从最根底的常识解说一步一步到最外围的 B2C 电子商务系实战开发,真正帮忙读者从根底入门向开发高手迈进。
④极客思维,极致效率;
本书以极客思维、深刻 Go 语言底层进行探索,帮忙读者理解背地原理。全书长篇累牍,以帮忙读者晋升开发效率为导向,同时尽可能帮忙读者缩短浏览本书的工夫。
⑤由易到难,重难点标注并重点解析;
本书编排由易到难,内容根本笼罩 Go Web 的支流前沿技术。同时对重难点进行重点解说,对易错点和留神点进行了提醒阐明,帮忙读者克服学习过程中的艰难。
⑥突出实战,疾速突击;
本书的实例代码是绝大部分都是来自于最新的企业实战我的项目。对于购买本书的读者,所有的源代码均能够通过网上下载,间接下载即可运行,让读者通过实际来加深了解。
⑦实战计划,可间接二次开发进行实战部署;
本书全书以实战为主,所有的示例代码,拿来即可运行。特地是第 9 章,购买本书的读者能够间接取得 B2C 电子商务系统的全副源代码。能够间接作为电商我的项目进行二次开发,用于读者的我的项目。读者购买本书不仅能够学习本书的各种常识,也相当于购买一个最新版的 Go 语言电商零碎解决方案及我的项目源码。
(2)《Go Web 编程》【新加坡】郑兆雄 著 2017 年 12 月出版
该书的长处:根底入门,出版较早,对 Web 的基本原理进行了解说。
该书的毛病:
①太过根底,并且没有循序渐进,须要肯定 Go 语言根底。
②开发例子是国内曾经过期的论坛零碎,不合乎以后市场需求。
③开发的部署是以 Heroku、GoogleAppEngine、DigitalOcean 等云平台上部署 Go Web 利用,不合乎国内的具体情况。
④不足零碎深刻的常识体系。
⑤不足高级实战教程及国内大型架构教训的介绍,无奈满足读者向高级迈进。