概述
使用 gin
使用 gin 框架,编写 api 接口时,需要定义返回格式
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "success",
"data": nil,
})
})
// 监听端口,启动服务
r.Run(":8080")
}
这种方法有一个弊端,每次返回都需要写这个结构
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "success",
"data": nil,
})
封装统一结果
定义统一结构体
package result
import (
"net/http"
"github.com/gin-gonic/gin"
)
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
func Result(c *gin.Context, code int, msg string, data interface{}) {
c.JSON(http.StatusOK, Response{
code,
msg,
data,
})
}
func Error(code int, msg string) Response {
return Response{
code,
msg,
nil,
}
}
func Ok(c *gin.Context) {
OkWithData(c, nil)
}
func OkWithData(c *gin.Context, data interface{}) {
Result(c, SUCCESS.Code, SUCCESS.Msg, data)
}
func OkWithMsg(c *gin.Context, msg string) {
Result(c, SUCCESS.Code, msg, nil)
}
func Fail(c *gin.Context, err Response) {
Result(c, err.Code, err.Msg, nil)
}
func FailWithMsg(c *gin.Context, err Response, msg string) {
Result(c, err.Code, msg, nil)
}
使用
package main
import (
"gin-demo/result"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
result.Ok(c)
})
r.GET("/hello", func(c *gin.Context) {
result.OkWithData(c, "hello world")
})
// 监听端口,启动服务
r.Run(":8080")
}
这样在每个 HandlerFunc 方法中只需要使用 result 包下面的方法即可,统一管理,还可以定义统一的错误码
统一错误码
package result
var (
OK = Error(200, "success")
NeedRedirect = Error(301, "need redirect")
InvalidArgs = Error(400, "invalid params")
Unauthorized = Error(401, "unauthorized")
Forbidden = Error(403, "forbidden")
NotFound = Error(404, "not found")
Conflict = Error(409, "entry exist")
TooManyRequests = Error(429, "too many requests")
ResultError = Error(500, "response error")
DatabaseError = Error(598, "database error")
CSRFDetected = Error(599, "csrf attack detected")
UserError = Error(5001, "username or password error")
CodeExpire = Error(5002, "verification expire")
CodeError = Error(5003, "verification error")
UserExist = Error(5004, "user Exist")
)
响应错误码
r.GET("/hello", func(c *gin.Context) {
result.Fail(c, result.ResultError)
})
最后
以上就是完美薯片为你收集整理的gin 统一响应结果的全部内容,希望文章能够帮你解决gin 统一响应结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复