阅读 1365

Go Web轻量级框架Gin学习系列:安装与使用

虽然Go标准库net/http对使用Go开发Web应用提供非常强大的支持,然而对于想要快速开发并及上线项目的团队来说,使用Web框架不失为一种更好的选择。

Go社区中,有许多非常优秀的Web框架,如Gin,Iris,Echo,Martini,Revel以及国人开发的Beego框架。

Gin的优点

  • 快速:基于Radix树的路由,性能非常强大。
  • 支持中间件:内置许多中间件,如Logger,Gzip,Authorization等。
  • 崩溃恢复:可以捕捉panic引发的程序崩溃,使Web服务可以一直运行。
  • JSON验证:可以验证请求中JSON数据格式。
  • 路由分组:支持路由分组(RouteGroup),可以更方便组织路由。
  • 错误管理机制:可以收集程序中的错误
  • 多种数据渲染方式:支持HTMLJSONYAMLXML等数据格式的响应。
  • 扩展性:非常简单扩展中间件。
  • 数据验证器:支持数据验证器且可以自定义。

安装与使用

Gin目前最新的版本是V1.3.0,其安装过程非常简单,不过在安装Gin之前,需要安装Go1.6或以上的版本(后续版本可能要Go1.8或以上),下面介绍两种安装方式。

直接安装

$  go get -u github.com/gin-gonic/gin //使用-u安装最新版本
复制代码

使用Govendor安装

提示:Govendor是使用Go语言开发Go项目依赖管理工具。

  1. 安装Govendor
$ go get github.com/kardianos/govendor
复制代码
  1. 安装Gin
$ govendor init
$ govendor fetch github.com/gin-gonic/gin@v1.3
复制代码

简单示例

通过上面的两种方式安装好Gin之后,下面通过一个简单示例看看怎么Gin使用开发Web应用。

import "github.com/gin-gonic/gin"
func main(){
    r := gin.Default()
    r.GET("/test",func(c *gin.Context){
        c.JSON(200,gin.H{"hello":"world"})
    })
    r.Run()
}
复制代码

可以看到,使用gin开发一个Web服务是很简单的一件事情,可以简单地分解为四步:

1. 导入gin包

在我们安装Gin框架的时候,已经将gin包安装到本地,如果使用go get命令安装的,则这个包路径为$GOPATH/src/github.com/gin-gonic/gin,而我们只需要使用import命令便可以将包导入。

import "github.com/gin-gonic/gin"
复制代码
2. 创建路由

使用gin.Default()方法会返回gin.Engine实例,表示默认路由引擎。

r := gin.Default()
复制代码

通过这种方式创建的gin.Engine,会默认使用Logger和Recovery两个中间件,可以用gin.New()方法创建一个不包含任何中间件的默认路由。

r := gin.New()
复制代码
3. 定义处理HTTP的方法

通过默认路由,我们可以创建处理HTTP请求的方法,示例中使用GET方法:

r.GET("/test",func(c *gin.Context){
    c.JSON(200,gin.H{"hello":"world"})
})
复制代码

Gin支持所有通用的HTTP请求方法:GET,POST,PUT,PATCH,OPTIONS,HEAD,DELETE,其使用方式与上面例子相同,如POST:

r.POST("/test",func(c *gin.Context){
    c.JSON(200,gin.H{"hello":"world"})
})
复制代码

每种方法都只处理对应的HTTP请求,使用Any方法则可以处理任何的HTTP请求。

r.Any("/test",func(c *gin.Context){
    c.JSON(200,gin.H{"hello":"world"})
})
复制代码
4. 监听端口

定义好请求之后,使用Run()方法便可监听端口,开始接受HTTP请求,如果Run()方法没有传入参数的话,则默认监听的端口是8080。

r.Run() //r.Run(":3000")
复制代码

小结

Gin是一个Go Web开发的轻量级框架,使用也非常地简单,容易上手,但是,使用Gin开发前,还是需要对Go原生支持的net/http有所了解。

关注下面的标签,发现更多相似文章
评论