goland 不自动转换结构体字段大小写或添加 json 标签,字段序列化为小写需手动添加 json:"name" 标签;未导出字段(如 name string)会被 json.marshal 忽略,仅导出字段(如 name string)配合 tag 才生效。

GoLand 本身不控制结构体字段名大小写,只生成代码骨架
GoLand 的「生成构造函数」「生成 Getter/Setter」等操作,只是按结构体字段原样复制名称,不会自动转小写或加 json / bson 标签。它不干预字段语义,也不修改命名约定——你看到的 Name 还是 Name,不是 name。
真正起作用的是结构体定义里的 struct tag
字段在 JSON 或 BSON 中显示为小写,靠的是你在结构体字段上手动写的 json:"name" 或 bson:"Name",而不是 GoLand 设置。GoLand 不提供“默认插入小写 tag”的开关。
- 没加
json:"xxx"标签的导出字段(如Name string),json.Marshal输出就是"Name" - 首字母小写的字段(如
name string)是未导出字段,json.Marshal直接忽略,根本不会出现在输出里 -
json:"-"表示完全排除;json:"name,omitempty"表示值为空时跳过该字段
想批量加小写 tag?别依赖 GoLand,用脚本或模板
GoLand 没有内置功能批量给所有字段加上 json:"xxx" 标签并转小写。硬要自动化,得自己动手:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 写个简单的 Go 脚本,用
go/parser解析结构体,提取字段名,转小写,生成带jsontag 的新结构体定义 - 用正则替换(谨慎):比如把
Name string替换为Name string `json:"name"`,但注意嵌套、注释、多行字段会出错 - 用
go:generate配合自定义工具,适合中大型项目统一规范
别指望在 GoLand 设置里勾选某个选项就让所有字段自动小写——它不负责运行时序列化行为,只负责帮你敲字更快。
容易被忽略的关键点
很多人卡在“为什么我字段名写了小写,JSON 还是大写”,其实是因为:字段名小写 ≠ 导出字段。Go 要求 JSON 序列化字段必须是导出字段(首字母大写),再靠 json:"xxx" 控制键名。所以 name string 不会进 JSON,而 Name string `json:"name"` 才是正确组合。










