golang 框架_学习笔记-Golang开发之Gin框架

本文目的

本文旨在向大家简单的介绍Gin框架。如需详细了解,可查看个人主页,有成套视频讲解。Gin框架第一讲

Gin框架

Gin是Go的微框架,封装比较优雅,API友好,源码注释比较明确,版本稳定。具有快速灵活,容错方便等特点。其实对于Go而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。框架更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。

f10717e8f20d58ff8eadcd6dd73abd90.png

Gin 特性

  • 快速:路由不使用反射,基于Radix树,内存占用少。
  • 中间件:HTTP请求,可先经过一系列中间件处理,例如:Logger,Authorization,GZIP等。这个特性和 NodeJs 的 Koa 框架很像。中间件机制也极大地提高了框架的可扩展性。
  • 异常处理:服务始终可用,不会宕机。Gin 可以捕获 panic,并恢复。而且有极为便利的机制处理HTTP请求过程中发生的错误。
  • JSON:Gin可以解析并验证请求的JSON。这个特性对Restful API的开发尤其有用。
  • 路由分组:例如将需要授权和不需要授权的API分组,不同版本的API分组。而且分组可嵌套,且性能不受影响。
  • 渲染内置:原生支持JSON,XML和HTML的渲染。

安装使用

环境要求

要安装Gin包,首先需要安装Go并设置Go工作区,即GOPATH。

gin框架需要Go语言版本在1.6及以上。可以通过go version查看自己的Go语言版本是否符合要求。

1、下载并安装

go get -u github.com/gin-gonic/gin

2、代码中导入

import "github.com/gin-gonic/gin"

安装完毕后,可以在当前系统的$GOPATH目录下的src/github.com目录中找到gin-gonic目录,该目录下存放的就是gin框架的源码。

简单示例

package mainimport "github.com/gin-gonic/gin"func main() {//Default返回一个默认的路由引擎r := gin.Default()    r.GET("/ping", func(c *gin.Context) {//输出json结果给调用方c.JSON(200, gin.H {"message": "pong",})})r.Run() // 此处不指定端口,则默认8080//r.Run(":8090")//指定端口为8090}

编译运行程序,打开浏览器,访问http://localhost:8080/ping页面显示:

{"message":"pong"}

RESTful API

关于RESTful API风格前两篇文章已经提到过,此处不过多赘述。(详见学习笔记-RESTful简单理解和学习笔记-RESTful基本规范)

Gin框架支持开发RESTful API的开发。

func main() {    r := gin.Default()    r.GET("/book", func(c *gin.Context) {//查询书籍信息        c.JSON(200, gin.H{            "message": "GET",        })    })    r.POST("/book", func(c *gin.Context) {//创建书籍记录        c.JSON(200, gin.H{            "message": "POST",        })    })    r.PUT("/book", func(c *gin.Context) {//更新书籍信息        c.JSON(200, gin.H{            "message": "PUT",        })    })    r.DELETE("/book", func(c *gin.Context) {//删除书籍信息        c.JSON(200, gin.H{            "message": "DELETE",        })    })}

路由组

我们可以将拥有共同URL前缀的路由划分为一个路由组。

func main() {    r := gin.Default()    userGroup := r.Group("/user")    {        userGroup.GET("/index", func(c *gin.Context) {...})        userGroup.GET("/login", func(c *gin.Context) {...})        userGroup.POST("/login", func(c *gin.Context) {...})    }    bookGroup := r.Group("/book")    {        bookGroup.GET("/name", func(c *gin.Context) {...})        bookGroup.GET("/data", func(c *gin.Context) {...})        bookGroup.POST("/data", func(c *gin.Context) {...})    }    r.Run()}

中间件

func main() {    // 创建一个不包含中间件的路由器    r := gin.New()    // 全局中间件    // 使用 Logger 中间件    r.Use(gin.Logger())    // 使用 Recovery 中间件    r.Use(gin.Recovery())    // 路由添加中间件,可以添加任意多个    r.GET("/benchmark", MyBenchLogger(), benchEndpoint)    // 路由组中添加中间件    // authorized := r.Group("/", AuthRequired())    // exactly the same as:    authorized := r.Group("/")    // per group middleware! in this case we use the custom created    // AuthRequired() middleware just in the "authorized" group.    authorized.Use(AuthRequired())    {        authorized.POST("/login", loginEndpoint)        authorized.POST("/submit", submitEndpoint)        authorized.POST("/read", readEndpoint)        // nested group        testing := authorized.Group("testing")        testing.GET("/analytics", analyticsEndpoint)    }    // Listen and serve on 0.0.0.0:8080    r.Run(":8080")}

本文的初衷为学习笔记的分享,部分图文来源于网络,如侵,联删。如需了解更多,个人主页,有详细成套视频讲解。Gin框架第一讲

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值