讲师中心 微信公众号
AI工具推荐 视频效率加速

Golang怎么处理JSON大数字精度_Golang如何避免前端JavaScript解析大整数丢失精度【避坑】

云明君_7495

云明君_7495

发布时间:2026-04-01 19:26:04

|

995人浏览过

|

来源于php中文网

原创

Go 的 json.Unmarshal 默认将大数字解析为 float64,导致超过 2⁵³−1 的整数精度丢失;应优先使用 json.Number 或 string 类型配合前端字符串传输,或自定义 UnmarshalJSON 实现无损解析。

golang怎么处理json大数字精度_golang如何避免前端javascript解析大整数丢失精度【避坑】

Go 的 json.Unmarshal 默认把大数字当 float64 解析

JavaScript 的 Number 只能安全表示 ±2⁵³−1 范围内的整数,超过这个值(比如 17 位以上 ID、时间戳微秒级)传给前端就可能四舍五入或变零。Go 默认用 float64 接 JSON 数字,哪怕你声明的是 int64 字段——只要数字超出 float64 精度范围,反序列化时就已失真。

实操建议:

立即学习“Java免费学习笔记(深入)”;

  • 所有可能超 2^53 - 1(即 9007199254740991)的整数字段,别用 int64 或 float64 直接接收,改用 string 或自定义类型
  • 在结构体字段上加 json:",string" 标签,强制 Go 把 JSON 数字当字符串解析(前提是前端也发字符串,比如 "12345678901234567890")
  • 如果无法控制前端发字符串,就得用 json.RawMessage + 手动解析,避免经过 float64 中转

用 json.Number 替代 float64 做中间容器

json.Number 是 Go 标准库提供的无损数字容器,本质是字符串,只在需要时才转成具体数值类型。它不自动解析、不损失精度,是处理大整数最轻量的方案。

实操建议:

立即学习“Java免费学习笔记(深入)”;

  • 结构体字段声明为 json.Number 类型,比如 ID json.Number `json:"id"`
  • 需要转整数时,调用 .Int64()(注意:它会 panic 如果值不是合法整数,比如带小数点或溢出)
  • 转字符串更安全:id.String(),直接拿到原始 JSON 文本,前端可原样消费
  • 别对 json.Number 做算术运算,它不是数值类型;需先转再算,且务必检查错误

前端配合:必须发字符串,不能依赖 Number 自动转换

即使 Go 层用了 json.Number 或 string,如果前端 JavaScript 还是用 JSON.parse('{ "id": 12345678901234567890 }'),那在 JS 解析那一刻就丢了精度——Go 根本没机会干预。

Golang Naming
Golang Naming

Go(Golang)命名规范 — 包括包、构造函数、结构体、接口、常量、枚举、错误、布尔值、接收器、getter/setter、函数等。

下载

实操建议:

立即学习“Java免费学习笔记(深入)”;

  • 后端 API 文档明确要求:所有大整数字段(如 id、trace_id、created_at_us)必须以字符串形式传输,例如 "id": "12345678901234567890"
  • 前端发请求前,用 JSON.stringify() 配合 replacer 把大数字转字符串,或用 BigInt + .toString()(注意兼容性)
  • 如果用 Axios,可在 transformRequest 里统一处理;React Query 或 SWR 的 queryFn 里提前格式化

自定义 UnmarshalJSON 是终极可控方案

当字段语义固定(比如就是 ID)、且必须强类型为 int64 时,自己实现 UnmarshalJSON 方法,绕过默认 float64 解析路径,是最稳妥的做法。

实操建议:

立即学习“Java免费学习笔记(深入)”;

  • 定义新类型:type ID int64,然后为它实现 UnmarshalJSON([]byte) error
  • 方法内用 json.Unmarshal 先解析到 json.Number,再调用 .Int64() 并捕获 json.InvalidUnmarshalError 和溢出错误
  • 别用 strconv.ParseInt(string(b), 10, 64) 直接解析原始字节——要跳过空白、处理负号、校验是否全数字,标准库的 json.Number.Int64() 已做好这些
  • 注意:这种类型不能直接用在 database/sql 的 Scan 中,需额外实现 Scanner 接口

真正麻烦的从来不是“怎么写”,而是前后端约定是否落地到每一行 JSON 字符串。只要有一处漏掉引号,精度就没了,而且很难排查——因为日志里看数字都“长得一样”。

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2323

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5023

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6090

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5618

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

803

2024.05.22

Golang 入门学习路线:从零基础到上手开发
Golang 入门学习路线:从零基础到上手开发

Golang 入门路线涵盖从零到上手的核心路径:首先打牢基础语法与切片等底层机制;随后攻克 Go 的灵魂——接口设计与 Goroutine 并发模型;接着通过 Gin 框架与 GORM 深入 Web 开发实战;最后在微服务与云原生工具开发中进阶,旨在培养具备高性能并发处理能力的后端工程师。

206

2026.02.24

Golang 疑难杂症解决指南:常见问题排查与优化
Golang 疑难杂症解决指南:常见问题排查与优化

《Golang 疑难杂症解决指南》聚焦开发过程中常见却棘手的问题,从并发模型、内存管理、性能瓶颈到工程化实践逐步拆解。通过真实案例与调试思路,帮助开发者定位问题根因,建立系统化排查方法。不只给出答案,更强调分析路径与工具使用,让你在复杂 Go 项目中具备持续解决问题的能力。

113

2026.02.24

Golang 运行与部署实战:从本地到云端
Golang 运行与部署实战:从本地到云端

《Golang 运行与部署实战》围绕 Go 应用从开发完成到稳定上线的完整流程展开,系统讲解编译构建、环境配置、日志与配置管理、容器化部署以及常见运维问题处理。结合真实项目场景,拆解自动化构建与持续部署思路,帮助开发者建立可靠的发布流程,提升服务稳定性与可维护性。

637

2026.02.24

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn