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返回即可。

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

(0)

相关推荐

  • go语言中int和byte转换方式

    主机字节序 主机字节序模式有两种,大端数据模式和小端数据模式,在网络编程中应注意这两者的区别,以保证数据处理的正确性:例如网络的数据是以大端数据模式进行交互,而我们的主机大多数以小端模式处理,如果不转换,数据会混乱 参考 :一般来说,两个主机在网络通信需要经过如下转换过程:主机字节序 -> 网络字节序 -> 主机字节序 大端小端区别 大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 低地址 --------------------> 高地址 高

  • Go语言string,int,int64 ,float之间类型转换方法

    (1)int转string s := strconv.Itoa(i) 等价于s := strconv.FormatInt(int64(i), 10) (2)int64转string i := int64(123) s := strconv.FormatInt(i, 10) 第二个参数为基数,可选2~36 注:对于无符号整形,可以使用FormatUint(i uint64, base int) (3)string转int i, err := strconv.Atoi(s) (4)string转in

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

    最近在项目中,一个go服务给前端提供了一个接口,返回json格式数据,其中Int64字段会超出javascript Number可表示的最大的Int值会丢精度,可以通过返回string类型值来屏蔽这个问题. 问题描述 Go服务返回的json格式如下,其中deviceId_O为:144115188584281742 而前端拿到的deviceId_O变成了:144115188584281730.最后两位数字变了,造成无论怎么调试都不成功. 其实这个问题不难定位,只需要查看一下调试工具中的Previe

  • Oracle出现超出打开游标最大数的解决方法

    本文实例讲述了Oracle出现超出打开游标最大数的解决方法.分享给大家供大家参考,具体如下: Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor.尤其是,假如你的createStatement和prepareStatement是在一个循环里面的话,就会非常轻易出现这个问题.因为游标一直在不停的打开,而且没有关闭. 一般来说,我们在写Java代码的时候,createStatement

  • 再谈javascript常见错误及解决方法

    初学Javascript,每天总是被很小的问题折磨半天,今晚就有好几个小问题. 第一:全部使用双引号造成匹配错误 <input type="checkbox" onmouseover="document.getElementById("test").style.display="none":"/> 改行一直报错误:unexpected toke "}"  检查半天也没有发现错误,对照发现视频上是

  • 关于oracle中clob字段查询慢的问题及解决方法

    最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了. blob字段直接用 select * from table_name where column like '%%'查找的时候是不能实现的 ,主要是字段类型不符,就想到了 字段转换成varchar2类型,然后再进行查询 select * from table_name where utl_raw.cast_to_varchar2(column) like '%orac

  • JS超出精度数字问题的解决方法

    精度问题最通俗易懂的解释 比如一个数 1÷3=0.33333333...... 大家都知道3会一直无限循环,数学可以表示,但是计算机要存储,方便下次取出来再使用,但0.333333...... 这个数 无限循环,你让计算机怎么存储?计算机再大的内存它也存不下,对吧! 所以不能存储一个相对于数学来说的值,只能存储一个近似值,所以当计算机存储后再取出来用时就会出现精度问题. JS超出精度数字解决 一.js 最大安全数字是 Math.pow(2,53) - 1,超出这个数字相加会出现精度丢失问题,可通

  • 常见的JavaScript内存错误及解决方法

    目录 1.计时器的监听 2.事件监听 3.Observers 4. Window Object 5. 持有DOM引用 5个常见的JavaScript内存错误 前言: JavaScript 不提供任何内存管理操作.相反,内存由 JavaScript VM 通过内存回收过程管理,该过程称为垃圾收集. 既然我们不能强制的垃圾回收,那我们怎么知道它能正常工作?我们对它又了解多少呢? 脚本执行在此过程中暂停 它为不可访问的资源释放内存 它是不确定的 它不会一次检查整个内存,而是在多个周期中运行 它是不可预

  • javascript alert乱码的解决方法

    javascript alert()函数就是一个用于输入提示的功能,但今天在使用alert()提示时中文乱码,拼音什么的都没有问题呀,下面我在论坛找到一解决办法,下面与大家分享.解决办法一: 复制代码 代码如下: echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';echo '<script type="text/javascript&q

  • FastCGI Error Number: 193 (0x800700c1)解决方法

    windows2003系统+IIS6,访问php文件报错: 在win2003的IIS6里新安装了,最新版本的PHP 5.4.7,其使用了FastCGI的方式,在安装完成重启了IIS之后出现如下错误: The FastCGI Handler was unable to process the request. Error Details: Error Number: 5 (0x80070005). Error Description:我这儿显示是乱码 HTTP Error 500 - Server

  • FastCGI Error Number: 5 (0x80070005)解决方法

    今天使用微软的FastCGI来搭建php在windows2003+IIS6下的运行环境,出现如下问题. 复制代码 代码如下: FastCGI Error The FastCGI Handler was unable to process the request. Error Details: Error Number: 5 (0x80070005). Error Description: 拒绝访问. HTTP Error 500 - Server Error. Internet Informat

  • 远程桌面连接时提示终端服务器超出了最大允许连接数解决方法小结

    解决这个现像的办法很多,如果马上需要登陆服务器,最easy的方法是: 复制代码 代码如下: 开始--运行中输入:mstsc /console /v:192.168.12.241:3389 原因:用远程桌面链接登录到终端服务器时经常会遇到"终端服务器超出最大允许链接数"诸如此类错误导致无法正常登录终端服务器,引起该问题的原因在于终端服务的缺省链接数为2个链接,并且当登录远程桌面后如果不是采用注销方式退出,而是直接关闭远程桌面窗口,那么实际上会话并没有释放掉,而是继续保留在服务器端,这样就

随机推荐