Go 中 JSON 反序列化失败的常见原因:结构体字段必须首字母大写导出
发布时间 - 2026-01-31 00:00:00 点击率:次go 的 `json.unmarshal` 要求结构体字段必须是**导出(exported)字段**(即首字母大写),否则无法访问和赋值,导致反序列化静默失败(字段保持零值)。
在 Go 语言中

以你提供的代码为例:
type GOOGLE_JSON struct {
code string `json:"code"` // ❌ 小写开头 → 未导出 → json 包无法设置
clientId string `json:"clientId"` // ❌ 同上
redirectUri string `json:"redirectUri"` // ❌ 同上
}尽管 JSON 字节流 {"code":"111","clientId":"222","redirectUri":"333"} 完全合法,json.Unmarshal 仍会成功返回 nil 错误(因为语法无误),但目标结构体所有字段均未被填充,最终打印结果为 { }(空结构体)。
✅ 正确写法是将字段名首字母大写,并保持 JSON tag 与原始键名一致:
type GOOGLE_JSON struct {
Code string `json:"code"` // ✅ 导出字段
ClientId string `json:"clientId"` // ✅
RedirectUri string `json:"redirectUri"` // ✅
}
body := []byte(`{"code":"111","clientId":"222","redirectUri":"333"}`)
var googleJson GOOGLE_JSON
err := json.Unmarshal(body, &googleJson)
if err != nil {
log.Fatal("JSON 解析失败:", err)
}
fmt.Printf("%+v\n", googleJson) // 输出:{Code:"111" ClientId:"222" RedirectUri:"333"}⚠️ 注意事项:
- 字段名大小写变更 不改变 JSON tag 的匹配逻辑;tag 始终决定 JSON 键与结构体字段的映射关系;
- 若字段无需导出但需参与 JSON 编解码(极少数场景),可考虑使用自定义 UnmarshalJSON 方法,但通常应优先遵循导出约定;
- 建议结构体命名采用驼峰式(如 GoogleJSON 而非 GOOGLE_JSON),符合 Go 语言规范;
- 使用 json.Marshal 时同样受此规则约束——未导出字段不会出现在输出 JSON 中。
总结:Go 的 JSON 处理严格依赖字段可见性。牢记 “小写 = 私有 = 不可 JSON 访问”,始终确保待编解码字段首字母大写,即可避免绝大多数 Unmarshal 静默失效问题。
# js
# json
# go
# 字节
# google
# red
# golang
# 字符串
# 结构体
# nil
# 首字母
# 序列化
# 这是
# 字段名
# 编解码
# 出现在
# 自定义
# 为例
# 而非
# 能对
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何获取上海专业网站定制建站电话?
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel如何处理表单验证?(Requests代码示例)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
深圳网站制作平台,深圳市做网站好的公司有哪些?
BootStrap整体框架之基础布局组件
如何在阿里云高效完成企业建站全流程?
微信公众帐号开发教程之图文消息全攻略
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在宝塔面板中修改默认建站目录?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
香港服务器建站指南:免备案优势与SEO优化技巧全解析
奇安信“盘古石”团队突破 iOS 26.1 提权
nginx修改上传文件大小限制的方法
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
linux写shell需要注意的问题(必看)
如何在腾讯云免费申请建站?
如何正确下载安装西数主机建站助手?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
如何在阿里云虚拟服务器快速搭建网站?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
,南京靠谱的征婚网站?
Android自定义listview布局实现上拉加载下拉刷新功能
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
如何打造高效商业网站?建站目的决定转化率
JS实现鼠标移上去显示图片或微信二维码
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
googleplay官方入口在哪里_Google Play官方商店快速入口指南
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】

