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


本文来自:掘金

感谢作者:eraise

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

相关阅读 >>

手撸Golang 架构设计原则 单一职责原则

Golang最适合做什么项目

Go之旅(五)- 基本类型

Go 语言环境安装

有趣的闭包

Golang如何对excel进行处理

Golang面向对象编程之继承&虚基类【组合&接口】

Go select

Go - 统一定义 api 错误码

Go - 使用 defer 函数 要注意的几个点

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...