代码拉取完成,页面将自动刷新
package base
import (
"encoding/xml"
"fmt"
"github.com/gin-gonic/gin"
"github.com/pkg/errors"
//"golib/base/zlog"
"net/http"
"strings"
)
// Render 定义render通用类型
type Render interface {
SetReturnCode(int)
SetReturnMsg(string)
SetReturnData(interface{})
GetReturnCode() int
GetReturnMsg() string
}
var newRender func() Render
func RegisterRender(s func() Render) {
newRender = s
}
func newJsonRender() Render {
if newRender == nil {
newRender = defaultNew
}
return newRender()
}
func RenderJson(ctx *gin.Context, code int, msg string, data interface{}) {
r := newJsonRender()
r.SetReturnCode(code)
r.SetReturnMsg(msg)
r.SetReturnData(data)
ctx.JSON(http.StatusOK, r)
return
}
func RenderJsonSuccess(ctx *gin.Context, data interface{}) {
r := newJsonRender()
r.SetReturnCode(0)
r.SetReturnMsg("success")
r.SetReturnData(data)
ctx.JSON(http.StatusOK, r)
return
}
func RenderJsonFail(ctx *gin.Context, err error) {
r := newJsonRender()
code, msg := -1, errors.Cause(err).Error()
switch errors.Cause(err).(type) {
case Error:
code = errors.Cause(err).(Error).ErrNo
msg = errors.Cause(err).(Error).ErrMsg
default:
}
r.SetReturnCode(code)
r.SetReturnMsg(msg)
r.SetReturnData(gin.H{})
ctx.JSON(http.StatusOK, r)
// 打印错误栈
StackLogger(ctx, err)
return
}
func RenderJsonAbort(ctx *gin.Context, err error) {
r := newJsonRender()
switch errors.Cause(err).(type) {
case Error:
r.SetReturnCode(errors.Cause(err).(Error).ErrNo)
r.SetReturnMsg(errors.Cause(err).(Error).ErrMsg)
r.SetReturnData(gin.H{})
default:
r.SetReturnCode(-1)
r.SetReturnMsg(errors.Cause(err).Error())
r.SetReturnData(gin.H{})
}
ctx.AbortWithStatusJSON(http.StatusOK, r)
return
}
func RenderXmlSuccess(ctx *gin.Context, body string) {
var response strings.Builder
response.WriteString(xml.Header)
response.WriteString(body)
ctx.Data(http.StatusOK, "application/xml", []byte(response.String()))
return
}
// default render
var defaultNew = func() Render {
return &DefaultRender{}
}
type DefaultRender struct {
ErrNo int `json:"errNo"`
ErrMsg string `json:"errMsg"`
Data interface{} `json:"data"`
}
func (r *DefaultRender) GetReturnCode() int {
return r.ErrNo
}
func (r *DefaultRender) SetReturnCode(code int) {
r.ErrNo = code
}
func (r *DefaultRender) GetReturnMsg() string {
return r.ErrMsg
}
func (r *DefaultRender) SetReturnMsg(msg string) {
r.ErrMsg = msg
}
func (r *DefaultRender) GetReturnData() interface{} {
return r.Data
}
func (r *DefaultRender) SetReturnData(data interface{}) {
r.Data = data
}
// StackLogger 打印错误栈
func StackLogger(ctx *gin.Context, err error) {
if !strings.Contains(fmt.Sprintf("%+v", err), "\n") {
return
}
//zlog.Error(ctx, "errorStack")
// todo 错误栈输出格式优化
fmt.Printf("-------------------stack-start-------------------\n%+v\n-------------------stack-end-------------------\n", err)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。