【Go】03-Gin
文档
使用技巧
HTTP method
GET方法
GET方法用于从服务器获取资源,通常用于查询数据。在Gin中,可以使用
GET方法来定义路由和处理函数,例如:1
2
3r.GET("/users", func(c *gin.Context) {
// 处理获取用户列表的逻辑
})
POST方法
POST方法用于向服务器提交数据,通常用于创建新资源。在Gin中,可以使用
POST方法来定义路由和处理函数,例如:1
2
3r.POST("/users", func(c *gin.Context) {
// 处理创建新用户的逻辑
})
PUT方法
PUT方法用于向服务器更新资源,通常用于更新已有资源。在Gin中,可以使用
PUT方法来定义路由和处理函数,例如:1
2
3r.PUT("/users/:id", func(c *gin.Context) {
// 处理更新用户信息的逻辑
})
PATCH方法
PATCH方法用于向服务器部分更新资源,通常用于更新已有资源的一部分。在Gin中,可以使用
PATCH方法来定义路由和处理函数,例如:1
2
3r.PATCH("/users/:id", func(c *gin.Context) {
// 处理部分更新用户信息的逻辑
})
DELETE方法
DELETE方法用于从服务器删除资源,通常用于删除已有资源。在Gin中,可以使用
DELETE方法来定义路由和处理函数,例如:1
2
3r.DELETE("/users/:id", func(c *gin.Context) {
// 处理删除用户的逻辑
})
OPTIONS方法
OPTIONS方法用于获取服务器支持的HTTP方法和其他选项。在Gin中,可以使用
OPTIONS方法来定义路由和处理函数,例如:1
2
3r.OPTIONS("/users", func(c *gin.Context) {
// 处理获取服务器支持的选项的逻辑
})
HEAD方法
HEAD方法与GET方法类似,但不返回响应体,只返回响应头信息。在Gin中,可以使用
HEAD方法来定义路由和处理函数,例如:1
2
3r.HEAD("/users/:id", func(c *gin.Context) {
// 处理获取用户信息的逻辑,但不返回响应体
})
TRACE方法
TRACE方法用于在请求路径上返回服务器收到的原始请求信息,用于诊断和调试。在Gin中,可以使用
TRACE方法来定义路由和处理函数,例如:1
2
3r.TRACE("/debug", func(c *gin.Context) {
// 处理返回原始请求信息的逻辑
})
gin.Context
MustGet
使用场景
在中间件中获取在之前的中间件或处理程序中设置的值。例如,可以在身份验证中间件中获取用户信息,以确保用户已经通过身份验证
1
2
3
4
5
6
7func AuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
user := c.MustGet("user").(*User)
// 进行身份验证逻辑
c.Next()
}
}在处理程序中获取在路由处理程序之前设置的值。例如,可以在一个处理程序中获取URL参数或路由参数
1
2
3
4
5func GetUserHandler(c *gin.Context) {
userID := c.MustGet("userID").(int)
// 根据userID获取用户信息
c.JSON(http.StatusOK, gin.H{"userID": userID})
}
注意点
MustGet方法在获取值时会进行断言,如果断言失败会引发panic。因此,必须确保在使用MustGet方法之前,已经在上下文中设置了相应的值- 在实际使用中,应该谨慎使用
MustGet方法,避免滥用panic。如果不确定是否能获取到值,可以使用Get方法进行安全的获取,并检查返回的结果是否为nil
ShouldBind*
ShouldBindUri1
2
3
4type MyId struct {
ID uint `uri:"id" binding:"required"`
}
router.POST(":id", handler)ShouldBindQuery1
2
3
4
5type MyInfo struct {
name string `form:"name"`
email string `form:"email"`
}
router.Get("", handler)ShouldBindJson1
2
3
4
5type MyInfo struct {
name string `json:"name" binding:"required"`
email string `json:"email" binding:"required"`
}
router.POST("", handler)
middleware
1 | func main() { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 cv-programmer!




