Go返回int64类型字段超出javascript Number范围的解决方法

 更新时间:2019年07月23日 09:54:48   作者:Forevernull  
这篇文章主要介绍了Go返回int64类型字段超出javascript Number范围的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近在项目中,一个go服务给前端提供了一个接口,返回json格式数据,其中Int64字段会超出javascript Number可表示的最大的Int值会丢精度,可以通过返回string类型值来屏蔽这个问题。

问题描述

Go服务返回的json格式如下,其中deviceId_O为:144115188584281742

而前端拿到的deviceId_O变成了:144115188584281730。最后两位数字变了,造成无论怎么调试都不成功。

其实这个问题不难定位,只需要查看一下调试工具中的Preview和Response区别就能对比出来,不过这个问题头回遇到还是会比较诡异。

Javascript Number 最大值

Javascript提供的Number对象提供了一个MAX_SAFE_INTEGER,这是一个固定值就是:9007199254740991。那么超出这个范围就怎么不安全了呢?看例子:

Go Int64 最大值

我们通过这段代码来获取int64最大值,值为:9223372036854775807.

i64 := int64(^uint(0) >> 1)
fmt.Println(i64)

解决方案

Go服务再返回json的时候 以字符串形式返回值 即可解决这个问题。如本文中第一张图中的deviceId返回即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • golang 自旋锁的实现

    golang 自旋锁的实现

    这篇文章主要介绍了golang 自旋锁的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 详解Go语言中make和new的区别

    详解Go语言中make和new的区别

    Go语言中,有两个比较雷同的内置函数,分别是new和make方法,那他们有什么区别呢?本文将通过一些示例为大家详细介绍一下,感兴趣的可以了解一下
    2023-02-02
  • Golang获取目录下的文件及目录信息操作

    Golang获取目录下的文件及目录信息操作

    这篇文章主要介绍了Golang获取目录下的文件及目录信息操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • go中string、int、float相互转换的实现示例

    go中string、int、float相互转换的实现示例

    本文主要介绍了go中string、int、float相互转换的实现示例,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Go语言map不支持并发写操作的原因

    Go语言map不支持并发写操作的原因

    Go语言为什么不支持并发读写map​,Go官方的说法是在多数情况下map只存在并发读操作,如果原生支持并发读写,即降低了并发读操作的性能,在使用 map 时,要特别注意是否存在对 map 的并发写操作,如果存在,要结合 sync 包的互斥锁一起使用,
    2024-01-01
  • 再次探讨go实现无限 buffer 的 channel方法

    再次探讨go实现无限 buffer 的 channel方法

    我们知道go语言内置的channel缓冲大小是有上限的,那么我们自己如何实现一个无限 buffer 的 channel呢?今天通过本文给大家分享go实现无限 buffer 的 channel方法,感兴趣的朋友一起看看吧
    2021-06-06
  • 一文教你如何在Golang中用好泛型

    一文教你如何在Golang中用好泛型

    golang的泛型已经出来了一年多了,从提案被接受开始我就在关注泛型了,好用是好用,但问题也很多,所以本文就来教大家如何在Golang中用好泛型吧
    2023-07-07
  • Golang使用协程实现批量获取数据

    Golang使用协程实现批量获取数据

    服务端经常需要返回一个列表,里面包含很多用户数据,常规做法当然是遍历然后读缓存。使用Go语言后,可以并发获取,极大提升效率,本文就来聊聊具体的实现方法,希望对大家有所帮助
    2023-02-02
  • Go错误和异常CGO fallthrough处理教程详解

    Go错误和异常CGO fallthrough处理教程详解

    这篇文章主要为大家介绍了Go错误和异常CGO fallthrough使用教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • golang Goroutine超时控制的实现

    golang Goroutine超时控制的实现

    日常开发中我们大概率会遇到超时控制的场景,比如一个批量耗时任务、网络请求等,本文主要介绍了golang Goroutine超时控制的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09

最新评论