头图

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应用,不符合国内的具体情况。

④缺乏系统深入的知识体系。

⑤缺乏高级实战教程及国内大型架构经验的介绍,无法满足读者向高级迈进。


Shirdon
5 声望0 粉丝

高级软件架构师,全栈开发者,Gopher,《Go Web编程实战派》作者