在项目中前后端对接一般都采用JSON格式,在GO项目中想使用JSON返回数据可以使用Gin框架,因为Gin框架提供了JSON方法。
创建一个统一返回JSON的工具类。
package controller
import "github.com/gin-gonic/gin"
type JsonStruct struct {
Code int `json:"code"` // 状态码
Msg interface{} `json:"msg"` // 返回信息
Data interface{} `json:"data"` // 返回值
Count int64 `json:"count"` // 数量
}
type JsonErrorStruct struct {
Code int `json:"code"` // 状态码
Msg interface{} `json:"msg"` // 返回信息
}
func ReturnSuccess(c *gin.Context, code int, msg interface{}, data interface{}, count int64) {
json := &JsonStruct{Code: code, Msg: msg, Data: data, Count: count}
c.JSON(200, json)
}
func ReturnError(c *gin.Context, code int, msg interface{}) {
json := &JsonErrorStruct{Code: code, Msg: msg}
c.JSON(200, json)
}
在Controller层使用。
package controller
import "github.com/gin-gonic/gin"
type UserController struct{}
func (u UserController) GetUserInfo(c *gin.Context) {
ReturnSuccess(c, 200, "success", "user info", 1)
}
func (u UserController) GetList(c *gin.Context) {
ReturnError(c, 404, "错误信息!")
}
func (u UserController) AddUserInfo(c *gin.Context) {
ReturnSuccess(c, 200, "success", "添加用户信息成功!", 1)
}
func (u UserController) DeleteUserInfo(c *gin.Context) {
ReturnSuccess(c, 200, "success", "删除用户信息成功!", 1)
}
在路由中注册。
package router
import (
"GinLearn/controller"
"github.com/gin-gonic/gin"
)
func Router() *gin.Engine {
r := gin.Default()
user := r.Group("/user")
{
user.GET("/info", controller.UserController{}.GetUserInfo)
user.POST("/list", controller.UserController{}.GetList)
user.PUT("/add", controller.UserController{}.AddUserInfo)
user.DELETE("/delete", controller.UserController{}.DeleteUserInfo)
}
return r
}
测试