Go JSON 与序列化
Go 中的 JSON 与序列化主题关注结构体如何映射到外部数据格式,以及编码解码边界如何影响 API 和数据访问层设计。
#type / concept
#status / growing
#tech / dev / backend
#resource / go
[!info] related notes
- 所属 MOC: Go Web 与后端 MOC, Go 数据访问 MOC
- 前置概念: Go 的 struct 与方法
- 并列概念: Go net/http, Go 中的 database/sql
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 设计
- “能编码成功”不等于数据模型边界设计合理