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

eraise · · 581 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

使用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的时候会再进行加工


有疑问加站长微信联系(非本文作者)

本文来自:掘金

感谢作者:eraise

查看原文:go使用iris问题之数字变科学计数法

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

581 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传