Go JSON 与序列化

Go 中的 JSON 与序列化主题关注结构体如何映射到外部数据格式,以及编码解码边界如何影响 API 和数据访问层设计。

#type / concept #status / growing #tech / dev / backend #resource / go

[!info] related notes

Go JSON 与序列化

一句话定义

Go JSON 与序列化的核心问题,是如何把程序内部结构体和外部传输格式之间做稳定映射,并明确哪些字段、命名和类型边界应该暴露出去。

核心机制 / 工作原理

在 Go 里,序列化通常围绕:

  • struct
  • 导出字段
  • tag
  • 编码 / 解码函数

展开。

这意味着 JSON 处理不只是“把对象转字符串”,而是涉及:

  • 哪些字段能被看到
  • 字段名如何映射
  • 空值是否输出
  • 内部模型和外部 DTO 是否应该分离

最小例子 / 最小场景

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

这个例子最关键的不是 tag 语法,而是:

  • 序列化边界往往也是 API 契约边界
  • 结构体字段设计会直接影响外部数据格式

为什么这部分重要

HTTP API、配置文件、消息队列、数据库 JSON 字段,都离不开序列化边界。很多工程问题其实不是“编解码会不会用”,而是“内部模型是不是直接暴露给了外部”。

边界与易混淆点

  • 未导出字段通常不会被常规 JSON 编码直接处理
  • JSON tag 是映射工具,不替代业务层 DTO 设计
  • “能编码成功”不等于数据模型边界设计合理
创建于 2026/6/20 更新于 2026/6/20