当前位置: 首页 > news >正文

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

一、什么是结构体标签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 开发几乎都围绕结构体 标签展开。
http://www.zskr.cn/news/1370997.html

相关文章:

  • 如何在MATLAB中快速完成翼型气动分析:XFOILinterface完整指南
  • Three 数学运算
  • 【数据分析】智慧城市温度与湿度分析系统【含Matlab源码 15555期】
  • 实测Taotoken多模型路由稳定性,低延迟与高可用性体验分享
  • Agent 一接消息通知中心就开始误点跳转:从 Notification Claim 到 Target Proof 的工程实战
  • 干货合集:2026年真正好用的专业AI论文写作软件
  • 如何在3分钟内将视频压缩90%?免费开源神器CompressO完全指南
  • 新版本Claude Desktop 无法使用 国产 deepseek v4 模型
  • 爬虫合规七道关:从HTTP请求到法庭证据链的技术实践
  • TrafficMonitor插件开发实战:从零构建Windows任务栏监控组件
  • 你的Logistic回归用对了吗?Minitab实操指南:二值、名义与有序数据的模型选择避坑
  • 桌面实时股票监控终极指南:5分钟打造你的Windows投资助手
  • Linux内核安全模块深入剖析【3.0】
  • Linux内核安全模块深入剖析【2.9】
  • 从零开始将 OpenClaw Agent 工具接入 Taotoken 的详细步骤
  • next.js 开发中的水合(Hydration)问题
  • 手把手教你搞定TaiShan鲲鹏服务器CentOS 7.9安装(附BIOS关键设置与iBMC远程安装)
  • 如何永久免费使用Cursor Pro:终极指南与完整解决方案
  • 【紧急预警】Gemini CSR项目启动窗口期仅剩47天!错过Q3政策红利将影响全年ESG评级得分
  • Zotero中文文献管理难题的终极解决方案:茉莉花插件深度解析
  • GitHub中文插件:5分钟实现GitHub界面全面中文化的终极指南
  • 火狐浏览器配置Burp Suite抓包完全指南
  • 机器学习赋能水泥熟料矿物相实时预测:从数据清洗到模型部署的工业实践
  • TrafficMonitor插件生态完整指南:10分钟打造个性化桌面监控中心
  • 10分钟精通Translumo:Windows最强开源实时屏幕翻译工具完整指南
  • Sketch MeaXure终极指南:如何用现代化TypeScript插件高效完成设计标注
  • Warcraft Helper终极指南:8大功能让魔兽争霸3在现代系统重获新生
  • 辽宁省本溪寄快递省钱干货|不用跑网点!四款公众号 + 小程序寄件渠道,发全国性价比拉满 - 时讯资讯
  • VSCode中R语言开发环境配置与使用完整教程
  • DeepSeek敏感词识别失效真相:3类隐蔽绕过手法+实时过滤响应<80ms的工业级配置清单