前言
在
Go
语言开发时,我们对外输出数据有以下几种
- http 状态码
- 接口状态码
- 接口提示信息
如果按照常规的输出,我们不得不重复写大量无用的代码,特此将输出数据进行封装,提供默认参数,不传值,则输出默认数据,传值则输出传入的数据,直接上代码
入口文件
package main
import (
"github.com/gin-gonic/gin"
"yangyj/tools/response"
)
func main() {
router := gin.Default()
api := router.Group("/api")
// v1 路由
v1 := router.Group("/v1")
{
v1.GET("/test", func(context *gin.Context) {
response.Success(context, response.R{
P: response.P{
Message: "yangyj",
Params: gin.H{
"dataset": "yangyj",
},
},
})
})
v1.GET("/test2", func(context *gin.Context) {
response.Fail(context, response.R{
T: "XML",
P: response.P{
Message: "yangyj",
Params: gin.H{
"dataset": "yangyj",
},
},
})
})
}
_ = router.Run(":8000")
}
Response 封装文件
package response
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
// 输出数据结构体
type P struct {
// HTTP 状态码 & 自定义状态码
Code int
// 输出消息
Message string
// 输出自定义数据
Params gin.H
}
// Response 结构体
type R struct {
// 输出类型,例如:JSON、XML、YAML
T string
// 输出数据
P P
}
func response(code int, message string, data gin.H) (int, gin.H) {
response := gin.H{
"code": code,
"message": message,
}
for index, value := range data {
response[index] = value
}
return code, response
}
func success(params P) (int, gin.H) {
code := http.StatusOK
message := http.StatusText(code)
data := params.Params
fmt.Println(params)
if params.Code != 0 {
code = params.Code
}
if params.Message != "" {
message = params.Message
}
return response(code, message, data)
}
func fail(params P) (int, gin.H) {
code := http.StatusInternalServerError
message := http.StatusText(code)
data := params.Params
fmt.Println(params)
if params.Code != 0 {
code = params.Code
}
if params.Message != "" {
message = params.Message
}
return response(code, message, data)
}
func write(context *gin.Context, contextType string, code int, res gin.H) {
switch contextType {
case "IndentedJSON":
context.IndentedJSON(code, res)
case "SecureJSON":
context.SecureJSON(code, res)
case "JSON":
context.JSON(code, res)
case "AsciiJSON":
context.AsciiJSON(code, res)
case "PureJSON":
context.PureJSON(code, res)
case "XML":
context.XML(code, res)
case "YAML":
context.YAML(code, res)
case "ProtoBuf":
context.ProtoBuf(code, res)
}
}
func Fail(context *gin.Context, response R) {
// 默认输出 JSON 数据
contextType := "JSON"
if response.T != "" {
contextType = response.T
}
// 构建输出数据
code, res := fail(response.P)
write(context, contextType, code, res)
}
func Success(context *gin.Context, response R) {
// 默认输出 JSON 数据
contextType := "JSON"
if response.T != "" {
contextType = response.T
}
// 构建输出数据
code, res := success(response.P)
write(context, contextType, code, res)
}
输出截图
/test2接口

/test接口
