gin的使用
记录一下自己的学习过程,顺带水一篇文章
简介
Gin 是一个用 Go 语言编写的高性能 HTTP Web 框架,特别适合需要高并发和快速响应的 Web 应用程序
go get -u github.com/gin-gonic/gin
gin框架中的路由
创建gin 路由器
r := gin.Default()// 创建一个默认的 Gin 路由器
r.Run(":8080")// 启动服务器,监听 8080 端口
不同的请求方式
GET
GET请求用于从服务器获取资源,一般为查询语句使用
r.GET("url",Middleware,Callback)//参数为url,中间件(匹配路由前后的操作),回调函数(请求处理)
POST
POST请求用于新建资源,一般是创建、注册语句使用
r.POST("url",Middleware,Callback)
PUT
PUT请求用于更新资源,一般是更新语句使用
r.PUT("url",Middleware,Callback)
DELETE
DELETE请求用于删除资源,一般是删除语句使用
r.DELETE("url",Middleware,Callback)
请求的数据绑定与数据获取
从url获取参数
//获取路由路径中的参数,路径中可以包含参数占位符(如 /:id),返回字符串(获取的信息)和布尔值(判断操作成功与否)
ctx.Params.Get("id")
//获取路由路径中的参数,路径中可以包含参数占位符(如 /:id),返回字符串(获取的信息),如果参数不存在,返回空字符串
ctx.Params.ByName("id")
//获取 URL 中的查询参数(如 ?pageNum=2),如果参数不存在,则返回一个指定的默认值(如 1)。
ctx.DefaultQuery("pageNum", "1")
//获取 URL 中的查询参数(如 ?pageNum=2),如果参数不存在,则空字符串
ctx.Query("id")
从请求中绑定数据
ctx.Bind(&requestModel)//将请求数据绑定到指定的结构体上,并自动根据请求的 Content-Type 选择合适的绑定器
ctx.BindJSON(&requestModel)//将 JSON 格式的请求数据绑定到结构体。
ctx.BindQuery(&requestModel)//将 URL 查询参数绑定到结构体。
ctx.BindXML(&requestModel)//XML 格式的请求数据绑定到结构体
ctx.BindYAML(&requestModel)//...
//可以在绑定函数前添加Should,如
ctx.ShouldBind(&requestModel) //如果绑定失败,不会立即返回错误响应,而是返回一个错误对象,允许开发者自行处理错误。
路由分组
PostRoutes := r.Group("/posts") //路由分组,PostRoutes用来接受"baseUrl/posts"的请求
PostRoutes.Use(middleware.AuthMiddleware())// 路由组中的中间件注册
postController := controller.NewPostController()
PostRoutes.POST("", postController.Create)
PostRoutes.PUT("/:id", postController.Update) //baseUrl/posts/2 这类的PUT请求处理
PostRoutes.GET("/:id", postController.Show) //baseUrl/posts/3 这类的GET请求处理
PostRoutes.DELETE("/:id", postController.Delete)
PostRoutes.POST("/page/list", postController.PageList) //baseUrl/posts/page/list 的POST请求处理
中间件
中间件必须是一个 gin.HandlerFunc 类型
func AuthMiddleware() gin.HandlerFunc { //一般形式
return func(ctx *gin.Context) {
}
}
中间件的Next() 和 Abort()
中间件里面加上 ctx.Next()后,Next()的语句后面先不执行,跳转到后面的中间件和回调函数中执行完后,才执行ctx.Next()后面的语句
func InitMiddleWareOne(ctx *gin.Context) {
fmt.Println("1")
ctx.Next()
fmt.Println("2")
}
//处理请求时会先输出1,处理结束后会输出2
ctx.Abort()表示终止调用该请求的剩余处理程序
Abort()后,中间件后面的回调函数(包括后面的中间件)不执行了
上下文
gin.Context 表示一个请求的上下文,包含了 HTTP 请求和响应的所有信息,并提供了一系列的方法来简化处理请求和构建响应的过程。
响应
ctx.JOSN(200, gin.H{"key": "value"}) //返回JSON
ctx.String(200, "Hello, %s", "world") //返回字符串
ctx.Status(200) //设置状态码
ctx.Header("Content-Type", "application/json") //设置响应头
数据
ctx.Set("key", "value") //在上下文中存储数据
ctx.Get("key") //从上下文中获取数据
ctx.GetHeader("Authorization") //获取请求头