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利用,不合乎国内的具体情况。
④不足零碎深刻的常识体系。
⑤不足高级实战教程及国内大型架构教训的介绍,无奈满足读者向高级迈进。