结构体标签与数据流向 笔记

发布时间:2026/5/24 18:34:48

结构体标签与数据流向 笔记 一、什么是结构体标签Struct TagGo 里面结构体字段后面经常会跟一串奇怪的东西Nicknamestringjson:nickname gorm:column:nickname toml:nickname这个东西叫结构体标签Struct Tag它本质上是给框架看的“额外说明”告诉GinGormJSONinitoml这些框架这个字段该怎么映射二、结构体标签的本质你一定要理解Go 结构体字段名 和 外部数据名字 经常不一样例如Go 字段TitleJSONtitle数据库title配置文件title xxx所以需要标签来建立映射关系三、结构体标签本质是“翻译官”例如Titlestringjson:title意思JSON里的 title 对应 Go里的 Title四、三种最常见标签标签场景数据流向json前后端交互JSON ↔ Gogorm数据库映射Go ↔ MySQLtoml / ini配置文件配置文件 → Go五、json 标签前后端交互这是Gin 里面最最最常见的标签。示例typeUserstruct{Usernamestringjson:username}六、前端发送 JSON前端{username:zhangsan}七、Gin 接收数据varbody User c.ShouldBindJSON(body)八、这里到底发生了什么核心Gin会第一步读取 Body读取{username:zhangsan}第二步解析 JSON变成key-value第三步根据标签匹配看到Usernamestringjson:username于是JSON 的 username ↓ 对应 Go 的 Username第四步赋值最终body.Usernamezhangsan九、json 标签为什么是双向的很多新人以为json 标签只能接收数据其实返回 JSON 时也会用示例c.JSON(200,body)Gin会body.Username根据json:username转换成{username:zhangsan}十、所以 json 标签本质输入 JSON → Go 输出 Go → JSON所以是双向映射十一、完整 JSON 数据流重点前端 JSON { title:学Gin } ↓ c.ShouldBindJSON Go结构体 body.Title 学Gin ↓ c.JSON 返回 JSON { title:学Gin }十二、gorm 标签数据库映射gorm 标签负责Go结构体 ↔ 数据库表十三、示例typeTodostruct{IDuintgorm:primaryKeyTitlestringgorm:column:title}十四、gorm:“column:title”表示数据库列 title 对应 Go字段 Title十五、GORM Create 到底发生了什么db.Create(todo)GORM会第一步读取结构体todo.Title第二步看到gorm:column:title第三步生成 SQLINSERTINTOtodos(title)VALUES(学Gin)十六、GORM 查询过程db.First(todo,1)数据库返回title学GinGORM再根据gorm:column:title赋值todo.Title学Gin十七、所以 gorm 也是双向的Go → SQL SQL → Go十八、GORM 自动规则如果你不写标签GORM 默认结构体名Todo自动变todos字段名Title自动变title十九、primaryKey 是什么IDuintgorm:primaryKey表示主键二十、主键的三个特性1. 唯一不能重复。2. 不能为空每行必须有。3. 一张表只能一个主键二十一、GORM 里的主键默认自增例如IDuintgorm:primaryKey插入时不用手动赋值MySQL自动1 2 3 4增长。二十二、索引非常重要很多新人以为WHERE 才是查找其实索引决定查找快不快二十三、普通索引gorm:index作用查询更快 允许重复二十四、唯一索引gorm:uniqueIndex作用查询更快 不能重复例如用户名 手机号 邮箱二十五、为什么索引会快你可以理解成给数据贴目录标签没有索引全表扫描有索引直接定位二十六、软删除重点很多公司删除数据并不会DELETE而是标记已删除示例DeletedAt gorm.DeletedAt二十七、软删除底层GORM执行db.Delete(user)其实不是DELETE而是UPDATEusersSETdeleted_atNOW()二十八、为什么不用真删除因为真实项目数据可能需要恢复例如订单用户日志二十九、配置文件标签ini/toml例如typeMysqlConfigstruct{Hoststringtoml:host}三十、配置文件host 127.0.0.1三十一、读取过程toml.DecodeFile(config.toml,conf)框架会读取 toml ↓ 找到 host ↓ 赋值给 Host三十二、ini.MapTo 本质一样ini.MapTo(conf,config.ini)也是配置文件 ↓ 结构体三十三、配置文件为什么是单向因为一般只读配置 不写回配置文件所以配置文件 → Go通常是单向。三十四、完整数据流向最重要真正项目里数据会这样流动前端 → 后端JSON ↓ ShouldBindJSON ↓ Go结构体后端 → 数据库Go结构体 ↓ GORM ↓ MySQL配置文件 → 项目config.toml ↓ DecodeFile ↓ 结构体三十五、结构体为什么这么重要你会发现前端 数据库 配置文件最后都在围绕Go结构体转。所以结构体 是整个Go后端的数据中心三十六、最终核心图必须理解前端 JSON ↓ json 标签 ↓ Go结构体 ↓ gorm 标签 ↓ MySQL数据库以及config.toml ↓ toml标签 ↓ Go结构体三十七、最后总结结构体标签本质不同数据格式之间的映射规则最常见三种标签作用json前后端 JSON 映射gorm数据库字段映射toml/ini配置文件映射真正核心思想结构体是中间桥梁 标签负责建立映射整个 Go Web 开发几乎都围绕结构体 标签展开。

相关新闻