以前学Java的时候,和Spring全家桶打好关系就行了,从Spring、Spring MVC到SpringBoot,一脉相承。

对于一个Web项目,使用Spring MVC,就可以基于MVC的思想开发项目了,不管是应对前后端分离还是不分离的场景,你都可以轻松驾驭。因为你只要知道,你用的是一个Web开发框架就行了。

相比于Spring在Java一家独大的局面,Go生态中的Web框架还在百家争鸣的阶段。从今天开始学习一款基于Go语言开发的Web开发框架Gin。

简介

Github:https://github.com/gin-gonic/gin

语言:Go语言

官网:https://gin-gonic.com/

环境搭建

Go版本:1.12.4

系统:macOS

依赖管理工具:go mod

IDE:Goland

因为我使用了go mod,所以引用gin的依赖算是很方便了。

如何创建一个go mod管理的新项目以及如何将老项目改造为go mod,可以参见这篇文章:https://juejin.im/post/5c8e503a6fb9a070d878184a,写的很详细了。

这就是我的go-demo:https://github.com/DMinerJackie/go-demo项目的所有第三方依赖了。

那么如何添加gin的依赖呢?有以下三种方式

go build xxx.gogo run xxx.gogo mod tidygithub.com/gin-gonic/gin v1.4.0

几乎不用什么繁琐的步骤,就完成了环境搭建。下面开始写第一个基于Gin的demo

第一个Demo

1、新建文件helloworld.go

2、点击执行该程序

从控制台程序可以看出服务已经启动,并且开始监听8080端口

3、访问接口

接下来我们在浏览器输入localhost:8080/ping即可看到程序返回的结果

一个极简的Web服务器就这样搭建完成并对外访问了。

上面的代码中

r:=gin.Default()
r.GET
r.Run()

其他Demo

1、渲染HTML

虽然现在很多都倡导并实行前后端分离了,即后端只提供HTTP接口,前端负责调用HTTP接口以及页面渲染。

但还是有前后端揉在一起的使用场景,gin就提供了这种能力。

具体的做法是提供一个HTML模板,服务端将得到的数据填充到模板中实现页面的渲染。

index.tmpl

user.tmpl

对应的HTML模板文件目录结构如下

代码部分

router.LoadHTMLGlob
router.GET
.title

执行结果如下

2、PureJSON

这里两个GET方法唯一不同的就是要渲染的内容一个使用JSON()方法一个使用PureJSON()方法。

启动程序后,我们看下访问结果有什么不同

可以看出JSON()渲染的会有中文以及标签转为unicode编码,但是使用PureJSON()渲染就是原样输出(我的浏览器装了插件,会自动解码,所以不点击右边的”RAW“两个接口返回的结果是一样的)。

这个问题,本周我们服务端在和客户端对接的时候还遇到了,因为框架返回的JSON串就是经过编码的,但是单独请求放到浏览器是没有问题的,客户端收到的却是经过编码的,最后排查发现是浏览器插件解码了。

3、渲染多种数据交换格式的数据

gin支持渲染XML、JSON、YAML和ProtoBuf等多种数据格式

今天先到这,后面再看看gin的源码。