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

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

时间: 2019-07-21

(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

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

C语言中 int main(int argc,char *argv[])的两个参数详解 argc是命令行总的参数个数: argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数.命令行后面跟的用户输入的参数. int main(int argc, char* argv[]) { int i; for (i = 0; i>i; return 0; } 执行时敲入 F:\MYDOCU

C语言中的char变量 char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed.虽然char在标准中是unsigned(因为char类型提出的初衷是用来表示ascii码,ascii码的范围是0~127),但实际情况中究竟是signed还是unsigned取决于编译器. 可通过下面程序判断编译器的默认char类型: void char_type() { char c=0xFF; if(c==-1) printf

例如,在下面的源程序中""""之内的"你"."好".","."C"."!"."\n"就属于程序要处理的字符. 复制代码 代码如下: #include int main(void){      printf("你好,C!\n");         return 0;} 该源程序中的其他字符则属于书写源

java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xf

我就废话不多说了,大家还是直接看代码吧~ public static void main(String[] args) { // 1.将long型转化为int型,其中int.long是基础类型 long a = 10; int b = (int) a; System.out.println("1.将long型转化为int型:" + b); // 2.将int型转化为long型,其中int.long都是基础类型 int a1 = 10; long b1 = a1; System.out.

前缀和后缀 HasPrefix判断字符串s是否以prefix开头: strings.HaxPrefix(s string, prefix string) bool 示例: package main import ( "fmt" "strings" ) func main() { pre := "Thi" str1 := "This is a Go program!" fmt.Println(strings.HasPrefix(

前言 缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区. 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区. 为什么要引入缓冲区 比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度. 又比如,

C语言中的getchar和putchar的使用方法 getchar是以行为单位进行存取的. 当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D),那么只有当最后一个输入字符为换行符'\n'(也可以是文件结束符EOF,EOF将在后面讨论)时, getchar才会停止执行,整个程序将会往下执行.譬如下面程序段: while((c = getchar()) != EOF){ putc

Java 大小写最快转换方式实例代码          这里直接给出实现代码,在代码中注释都很清楚,不多做介绍. Java代码 package io.mycat; import java.util.stream.IntStream; /** * 小写字母的 'a'=97 大写字母 A=65 更好相差32利用这个差进行大小写转换 * @author : Hpgary * @date : 2017年5月3日 10:26:26 * @mail: hpgary@qq.com * */ public cl

c语言int超出范围字符串,Go返回int64类型字段超出javascript Number范围的解决方法...相关推荐

  1. Json返回时间中出现乱码问题的两种解决方法

    Json返回时间中出现乱码问题的两种解决方法 参考文章: (1)Json返回时间中出现乱码问题的两种解决方法 (2)https://www.cnblogs.com/hanyinglong/archiv ...

  2. JdbcTemplate中queryForObject方法返回空结果或不正确结果数量的解决方法

    JdbcTemplate中queryForObject方法返回空结果或不正确结果数量的解决方法 参考文章: (1)JdbcTemplate中queryForObject方法返回空结果或不正确结果数量的 ...

  3. qlabel设置换行符无效_php 字符串中的\n换行符无效、不能换行的解决方法

    例如下面的代码: echo 'hello\n'; echo 'world'; ?> 程序的中的换行符\n会直接输出,无法正确换行,解决方法是把单引号改为双引号: echo "hello ...

  4. c语言蓝屏代码大全,window_Win10系统出现蓝屏提示错误代码0x00000050两种解决方法,  刚刚升级Win10系统的一段 - phpStudy...

    Win10系统出现蓝屏提示错误代码0x00000050两种解决方法 刚刚升级Win10系统的一段时间,容易出现蓝屏的问题.导致蓝屏故障的原因各不相同,我们需要根据错误代码来执行正确的解决方法.比如,最 ...

  5. mysql 字符串不限长度_mysql提示字符长度超限制的解决方法

    mysql提示字符长度超限制的解决方法 发布时间:2020-06-11 16:16:16 来源:亿速云 阅读:294 作者:鸽子 mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb ...

  6. php浮点转int少1,PHP中浮点数计算比较及取整不准确的解决方法

    显然在这里,实际上作为浮点型数据,其精度已经损失了一部分,达不到完全精确.所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等.需要说明的是,这不是PHP的问题,而是计算机内部 ...

  7. php查询mysql返回大量数据结果集导致内存溢出的解决方法

    web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答 ...

  8. c语言 2059 语法错误,关于CUDA C 项目中“ error C2059: 语法错误:“” ”问题的解决方法...

    该问题的关键在于理解CUDA项目中C\C++文件需要由c++编译器进行编译,而CUDA C的源文件需要由CUDA的编译器nvcc.exe进行编译. 发生该语法错误的原因是cu文件被C++编译器所编译, ...

  9. python调用接口返回401_Python接口测试之401错误的分析和解决方法(一)

    接口的测试中,经常会遇到客户端向服务端发送一个请求,服务端返回401的错误,那么今天本文章就来说明在接口测试中如何分析以及解决该问题. 我们知道在HTTP返回的状态码中,401错误表示的是被请求的页面 ...

最新文章

  1. 基于VTK的Delaunay的三角剖分算法
  2. 设计模式——命令模式(Command Pattern)
  3. jQuery-强大的jQuery选择器 (详解)
  4. pandas库基础学习
  5. 吴恩达深度学习笔记(四)—— 正则化
  6. JQuery + jquery插件
  7. poj2513Colored Sticks(无向图的欧拉回路)
  8. centos7.0 安装java1.8,tomcat
  9. bzoj 1041: [HAOI2008]圆上的整点
  10. jQuery模拟鼠标点击事件失效的问题
  11. Java中的自定义注解
  12. paypal沙盒用户_如何使用PayPal实施用户登录
  13. 树莓派笔记12:通过SPI操作OLED显示屏
  14. 使用扩展卡尔曼滤波(EKF)进行AHRS九轴姿态融合
  15. 父亲节的海报设计了吗?
  16. 匿名飞控STM32版代码整理之Ano_Imu.c
  17. Hi3519v101 uart驱动
  18. 历届试题 Excel地址(Excel单元格的地址表示很有趣,它使用字母来表示列号。   比如,   A表示第1列,   B表示第2列,   Z表示第26列,   AA表示第27列,)
  19. python实训报告5000字_测量实训报告范文5000字
  20. 人力资源知识图谱搭建及应用

热门文章

  1. 小红书消息中间件的运维实践与治理之路
  2. 启动、内存、卡顿三大分析,用户体验就用它?
  3. 如何用阿里云实行全链路数据追踪
  4. 第九弹 - 脚本模式与参数视图
  5. 阿里中间件开源组件:Sentinel 0.2.0正式发布
  6. 阿里云发布vSphere虚拟机备份服务 ,网络带宽有限条件下依然能有效保护数据
  7. 实战:阿里巴巴 DevOps 转型后的运维平台建设
  8. 机器学习必备:前20名Python人工智能和机器学习开源项目
  9. 理解卷积神经网络的利器:9篇重要的深度学习论文(上)
  10. AliOS Things网络适配框架 - SAL