初识go语言-gin框架的简单使用 | 青训营笔记

166 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第6天

前言

我们都知道大多数编程语言都有框架的支持来简化开发,像spring全家桶、vue等。go也不例外有着许多开源的优秀框架,gin便是go的web框架,这里我们主要了解和学习gin框架的简单使用。

简单了解go的web框架

go是一门快速成长的编程语言,标准库提供的net/http已经比较完善,对http协议实现较好,因此基于该库实现一个框架不是难事,go的生态链便出现了很多优秀的开源框架。

  • gin:go实现的web微框架,简单优雅,api友好,以更好的性能实现类似Martini框架的api。
  • beego:一个快速开发go应用的http框架,可以快速开发api、web、服务端等各种应用,是一个restful的框架。
  • iris:一个快速简单、功能齐全有效的web框架,完备的mcv支持(被称为全宇宙最快的goweb框架)。

gin的安装及使用

安装

gin框架的安装十分简单,在终端或者控制台运行以下命令即可安装:

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

在使用的时候导包:

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

一个简单的HelloWorld

//创建服务
ginServer := gin.Default()
//添加一个接口
ginServer.GET("/hello", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "Hello"})
})
//启动并添加服务端口
ginServer.Run(":8081")

restfulapi

上面有提到beego是一个restful的框架,gin也是支持restful风格的。

get接口简单例子:

ginServer.GET("/get", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "get"})
})

post接口简单例子:

ginServer.POST("/post", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "post"})

put接口简单例子:

ginServer.PUT("/put", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "put"})

delete接口简单例子:

ginServer.DELETE("/delete", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "delete"})

响应页面

gin也是支持响应一个页面的,并可以在返回一个页面的同时返回后端的数据

//创建服务
ginServer := gin.Default()
//加载静态资源
ginServer.LoadHTMLGlob("static/*")//此处路径一般为相对路径

ginServer.GET("getindex", func(context *gin.Context) {
context.HTML(http.StatusOK, "index.html", gin.H{//这里要给一个页面的路径
"msg": "后端数据" })
})
ginServer.Run(":8081")

获取请求参数

gin提供了很多获取请求参数的方法,十分的方便快捷。

获取请求路径?后面的参数(query参数)

ginServer.GET("/get", func(context *gin.Context) {
   变量名 :=context.Query("路径?后的参数名")
})

获取路径上/后面的参数(param参数)

ginServer.GET("/get/:userid", func(context *gin.Context) {
   userid :=context.Param("userid")
})

获取前端传给后端json格式的数据

ginServer.POST("/post", func(context *gin.Context) {
   data,_ :=context.GetRawData()//这里接收到的data需要进行反序列化
})

获取表单数据

ginServer.POST("/post", func(context *gin.Context) {
   userid :=context.PostForm("userid")
})

路由

重定向

ginServer.GET("/get", func(context *gin.Context) {
   context.Redirect(http.StatusMovedPermanently,"要重定向的url")
})

404

ginServer.GET("/get", func(context *gin.Context) {
   context.HTML(http.SattusNotFound,"404.html",nil)
})

路由组

此处就有点像主路径下面有多个子路径。

adminGroup :=ginnServer.Group("/admin")
{
     aminGroup.GET("/add")
     aminGroup.GET("/find")
}

自定义拦截器

此处需要传入一个gin的Handler并在此上实现自己的Handler。

// 自定义中间件 拦截器
func myHandler() gin.HandlerFunc {
   return func(context *gin.Context) {
      context.Set("key", "1")
      //逻辑判断
      context.Next()  //放行
      context.Abort() //拦截
   }
}

小结

通过学习能够发现,gin可以简单快速的创建一个可以访问的web服务。当然仅仅是简单了解gin的使用远远不够,还有更多的地方值得探索。

参考