go使用iris问题之数字变科学计数法

使用iris mvc做api,但返回的数据里的数字都变成了科学计数法: 3e5 这样的东西

看一下使用方式

func NewDefault() *iris.Application {
    app := iris.New()
    app.Logger().SetLevel("Debug")

    // 设置路径
    pathToAccessLog := "./log/access_log.%Y%m%d%H%M"
    // 设置多久分一个文件出来
    w, err := rotatelogs.New(
        pathToAccessLog,
        rotatelogs.WithMaxAge(24*time.Hour),
        rotatelogs.WithRotationTime(time.Hour))
    if err != nil {
        panic(fmt.Sprintf("rotate logs setup failure: %s", err))
    }

    ac := accesslog.New(w)
    ac.ResponseBody = true
    // 设置输出到控制台
    ac.AddOutput(app.Logger().Printer)
    // 应用中间件
    app.UseRouter(ac.Handler)

    // Register the recovery, after accesslog and recover,
    // before end-developer's middleware.
    app.UseRouter(recover.New())

    app.UseRouter(cors.AllowAll())
    app.Validator = validator.NewValidator()

    return app
}

func Run(port string) {
    app := commonctrl.NewDefault()
    mvcApp := mvc.New(app)
    mvcApp.Party("auth").Handle(new(AuthController))

    if err := app.Listen(port, iris.WithOptimizations); err != nil {
        _, _ = fmt.Fprintf(os.Stderr, "user service start failure: %s\n", err)
        return
    }
}
复制代码

期望与结果

{“code”:0,”msg”:”success”,”data”:1619568000}

实际得到结果

{“code”:0,”msg”:”success”,”data”:1619568e30}

解决方案

accesslog设置 BodyMinify=true

ac.BodyMinify = true
复制代码

原因

accesslog设置 ResponseBody=true 的以后,中间件对返回值进行了一次读写导致

1620399746118-wyv.png


iris在写入json的时候,可以配置参数来默认驼峰命名、空值省略等,accesslog在读取ResponseBody的时候会再进行加工

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享