Go 中嵌套结构体 JSON 序列化失败的解决方案


go 的 `json.marshal` 只能序列化导出(首字母大写)字段;未导出字段(小写开头)会被忽略,导致序列化结果为空对象 `{}`。

在 Go 语言中,JSON 序列化依赖于反射机制,而反射仅能访问导出(exported)字段——即字段名以大写字母开头的成员。你代码中的 Configitem 和 GuiConfig 结构体所有字段均以小写字母开头(如 local_address、configs),因此 json.Marshal 无法读取它们的值,最终输出空 JSON 对象 {}。

✅ 正确做法是将结构体字段改为导出字段,并可选地通过 json 标签控制键名:

type Configitem struct {
    LocalAddress string `json:"local_address"`
    LocalPort    int    `json:"local_port"`
    Method       string `json:"method"`
    Password     string `json:"password"`
    Server       string `json:"server"`
    ServerPort   string `json:"server_port"`
    Timeout      int    `json:"timeout"`
}

type GuiConfig struct {
    Configs []*Configitem `json:"configs"`
    Index   int           `json:"index"`
}

修改后,原 main 函数无需改动,即可正确输出:

{"configs":[{"local_address":"eouoeu","local_port":111,"method":"eoeoue","password":"ouoeu","server":"oeuoeu","server_port":"qoeueo","timeout":3333}],"index":1}

⚠️ 注意事项:

  • 字段名大小写决定是否可被 encoding/json 访问,与 json 标签无关;
  • 若因封装需求必须保留私有字段,可手动实现 json.Marshaler 接口,自定义序列化逻辑(需谨慎维护一致性);
  • 建议统一使用驼峰命名 + json 标签,兼顾 Go 风格与 API 兼容性(如 LocalAddress → "local_address")。

总结:Go 的 JSON 序列化遵循严格的可见性规则——只有导出字段才能被序列化。修正字段首字母大小写是最简单、标准且推荐的解决方式。


# word  # js  # git  # json  # go  # ai  # igs  # 封装  # 结构体  # 接口  # 对象  # 序列化  # 首字母  # 字段名  # 自定义  # 可选  # 最简单  # 仅能  # 均以  # 为空  # 若因 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: 电脑无法识别U盘怎么办 Windows磁盘管理与驱动更新修复识别问题【解决】  Win11怎么制作U盘启动盘_Win11原版系统安装盘制作【详解】  Mac怎么进行语音输入_Mac听写功能设置与使用【教程】  php删除数据怎么加限制_带where条件删除避免全删【指南】  如何诊断并终止卡死的 multiprocessing 子进程  如何使用Golang捕获并记录协程panic_保证主程序稳定运行  Win11如何设置省电模式 Win11开启电池节电功能【优化】  C++如何获取CPU核心数?(std::thread::hardware_concurrency)  Mac如何彻底清理浏览器缓存?(Safari与Chrome)  Win10系统字体模糊怎么办_Windows10高级缩放设置修复  短链接怎么用php还原_从基础原理到代码实现教学【详解】  如何使用Golang写入二进制文件_Golang io Write二进制写入示例  Python装饰器设计思路_功能增强机制说明【指导】  Win10电脑怎么设置休眠快捷键_Windows10电源按钮功能定义  Win11怎么关闭自动调节亮度 Win11禁用内容自适应亮度【设置】  c++的位运算怎么用 与、或、异或、移位操作详解【底层知识】  Win11快速助手怎么用_Win11远程协助连接教程【工具】  c++怎么调用nana库开发GUI_c++ 现代风格窗口组件与事件处理【实战】  Win10如何备份驱动程序_Win10驱动备份步骤【攻略】  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  Win11怎么开启移动热点_Windows11共享网络给手机设置教程  php接口返回数据乱码怎么办_php接口调试编码问题解决【指南】  php增删改查在php8里有什么变化_新特性对curd的影响【指南】  TestNG的testng.xml配置文件怎么写  Python文件和流处理指南_高效读写大体积数据文件  Win11怎么开启远程桌面连接_Windows11系统属性远程设置  Windows任务计划服务异常原因_任务调度失败的处理方案  Win11怎么打开旧版计算器_Win11恢复传统计算器应用【详解】  C++中的协变与逆变是什么?C++函数指针与返回类型详解【类型系统】  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  Win11怎么设置屏保_Windows 11屏幕保护程序开启与设置【详解】  如何提升Golang JSON序列化性能_Golang JSON编码效率优化方法  Win11怎样安装微信开发者工具_Win11安装开发者工具教程【步骤】  windows 10应用商店区域怎么改_windows 10微软商店切换地区方法  php中$this和::能混用吗_对象与静态作用域冲突解决【方法】  php485能和物联网模块通信吗_php485对接NB-IoT模块实例【说明】  c++获取当前时间戳_c++ time函数使用详解  Win11怎么关闭系统提示音_Windows11声音方案设为无声教程  如何在 Laravel 中通过嵌套关联关系进行 orderBy 排序  Mac怎么设置登录项_Mac管理开机自启动程序【教程】  Python列表推导式与字典推导式教程_简化代码高效写法  Mac如何修改Hosts文件?(本地开发与屏蔽网站)  Win11怎么格式化U盘_Win11系统U盘格式化与文件系统选择【教程】  php转exe用什么工具打包快_高效打包软件推荐【汇总】  Python迭代器生成器进阶教程_节省内存与懒加载实战  Win11无法安装软件怎么办_Win11解除应用安装限制设置【修复】  Windows系统文件被保护机制阻止怎么办_权限不足错误处理方案  Windows10如何更改鼠标图标_Win10鼠标属性指针浏览  php后缀怎么变mp4能播放_让php伪装mp4正常播放的技巧【技巧】  PythonFastAPI项目实战教程_API接口与异步处理实践 

 2025-12-26

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.