gin的简单使用

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") //获取请求头
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值