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

Gin 核心概念 前后端交互笔记

这篇笔记主要围绕前后端交互Gin 核心概念,帮你系统理解从浏览器发请求,到 Gin 处理,再返回响应的完整流程。


1. JSON:前后端的通用语言

前端(JavaScript)和后端(Go)使用不同语言,它们不能直接理解对方的数据结构。JSON(JavaScript Object Notation)就像一份通用的快递包裹,前端可以打包发送,后端拆包处理,再打包返回。

示例 JSON 数据:

{"title":"学Gin","status":false}

类比流程:

前端打包 → 发送 JSON → 后端拆包处理 → 后端打包返回 → 前端拆包显示

2. 前后端交互完整流程

  1. 前端发送请求
fetch('/todos',{method:'POST',body:JSON.stringify({title:'学Gin',status:false}),headers:{'Content-Type':'application/json'}})
  1. Gin 接收请求
varbody Todo c.ShouldBindJSON(&body)// 把 JSON 装进 Go 的结构体
  1. 处理业务逻辑
  • 保存数据库
  • 校验数据
  • 执行其他逻辑
  1. Gin 返回 JSON 响应
c.JSON(200,gin.H{"message":"创建成功","todo":body})
  1. 前端接收响应
res.json().then(data=>console.log(data))

整体流程可以简化为:

前端 → JSON.stringify → 发请求 ↓ Gin → c.ShouldBindJSON → 装进结构体 → 处理 ↓ Gin → c.JSON → 返回 JSON ↓ 前端 → JSON.parse → 更新页面

3. 结构体标签json:"title":双向翻译官

在 Go 中,结构体字段首字母大写才能被外部访问。JSON 字段通常是小写。标签json:"..."就像翻译官:

typeTodostruct{Titlestring`json:"title"`}
方向过程
输入(前端→后端)JSON"title"→ 装入 Go 的Title
输出(后端→前端)Go 的Title→ 转成 JSON"title"

例子:前端传"title":"学Gin",经过绑定后body.Title = "学Gin",再返回给前端时自动转成"title":"学Gin"


4. Body:请求的“身体”

  • Body 是 HTTP 请求的内容载体,不在 URL 中
  • 用于传输 JSON 或其他数据格式

示例

终端 curl:

curl-d'{"title":"学Gin"}'http://localhost:8080/todos

前端 fetch:

fetch('/todos',{method:'POST',body:JSON.stringify({title:'学Gin'})})

后端 Gin:

varbodystruct{Titlestring`json:"title"`}c.ShouldBindJSON(&body)

此时body.Title = "学Gin"


5. curl:命令行版前端

  • curl 是命令行工具,用于模拟前端发请求,便于测试接口
  • 对应关系:
操作前端curl
发 GETfetch(url)curl url
发 POSTfetch({method:'POST', body:...})curl -X POST -d '...'
收 JSONres.json()终端直接打印

6. Gin 获取请求数据的四种方式

方法数据来源URL 示例
c.Param("id")URL 路径参数:id/users/5
c.Query("name")URL 查询参数?name=/search?name=zhangsan
c.ShouldBindJSON(&body)请求体 Body不在 URL
c.GetHeader("Authorization")请求头 Header不在 URL

7.c.BindJSON赋值过程详解

varbodystruct{Titlestring`json:"title"`}c.BindJSON(&body)

执行过程:

  1. Gin 读取请求 Body 中的 JSON:
{"title":"学Gin"}
  1. 根据结构体标签json:"title"匹配字段

  2. 将值"学Gin"存入body.Title

最终:

body.Title=="学Gin"

这个过程就是“拆包 + 填字段”的流程。


8. 函数签名标准格式

Go 的函数签名标准格式:

func函数名(参数名 参数类型)返回值类型{// 函数体}

示例

funcRegister(c*gin.Context){...}// 无返回值funcInit(filestring)error{...}// 返回 errorfuncAdd(aint,bint)int{returna+b}// 有参数有返回值
  • 参数在括号里
  • 返回值类型在括号外
  • Gin 中的路由处理函数通常以c *gin.Context作为参数,用于接收请求、返回响应

总结

  1. JSON 是前后端通用语言,请求和响应都是 JSON
  2. c *gin.Context是 Gin 的核心管家,负责绑定请求、返回响应
  3. 结构体标签json:"..."实现字段大小写翻译
  4. Body用来传递请求数据,不在 URL
  5. 函数签名规范:参数在括号,返回值在括号外,Gin 路由函数固定传入c *gin.Context

理解这些概念,你就能顺畅完成前后端交互,并在 Gin 框架下处理各种请求。

http://www.cnnetsun.cn/news/2431930.html

相关文章:

  • 【企业级智能自动化决策手册】:从流程自动化(RPA)到认知自动化(AI Agent)的5阶跃迁路径
  • 如何彻底清理显卡驱动:提升系统性能的终极指南
  • 从静态到交互:解锁Matplotlib在Web前端的三种实践路径
  • 2026在线水印去除怎么做?4款热门去水印工具推荐+实战方法指南
  • QMCDump:轻松解密QQ音乐加密音频的完整指南
  • Electron在鸿蒙PC上读写剪贴板,我被格式兼容性问题搞崩溃了
  • Electron 在鸿蒙 PC 上启动慢?我把冷启动从 7 秒压到 1.5 秒的完整记录
  • 3步解锁老旧Mac的第二次生命:OpenCore Legacy Patcher终极指南
  • 3步搞定《杀戮尖塔》模组安装:ModTheSpire终极使用指南
  • 终极指南:FanControl风扇控制软件完全配置教程
  • BOX工控机在无人机机载系统中有什么优势?这 3 点是普通工控机比不了的
  • Hyper-V DDA图形工具:5分钟完成GPU直通的终极指南
  • PCB设计避坑指南:用ANSYS Designer快速评估串扰风险(含耦合长度设置技巧)
  • Qt 6.x 新特性概览:从 Qt 5 到 Qt 6 的升级之路
  • 2026 AI 思维导图工具实测推荐:从自动生成到知识整理,5款工具横向测评
  • 从键盘声到CPU热浪:聊聊那些脑洞大开的侧信道攻击实战案例
  • 【NotebookLM概念关联分析黄金法则】:谷歌内部未公开的3类关联强度阈值,错过将影响RAG响应质量
  • Cat.1内置式光控器:从硬件拆解到场景落地的智能照明实战指南
  • 5分钟快速指南:如何用KMS_VL_ALL_AIO一键激活Windows和Office
  • 你的边缘AI盒子为什么烫手?——散热设计的最后一道物理防线
  • 学Simulink——交流微电网中双向DC-AC变换器的多模式切换仿真
  • GREW数据集预处理详解:从原始tgz文件到OpenGait可用的pkl文件,到底发生了什么?
  • 中小团队如何利用Taotoken统一管理多个AI模型API密钥
  • 极速窗口管理:3个创新策略彻底改变多任务处理
  • 设计模式 - 前言
  • 告别QRegExp!手把手教你将Qt5老项目正则代码升级到QRegularExpression
  • AWorks嵌入式系统下ZLG72128驱动与HMI应用架构实战
  • Anthropic成大模型领域赢家,CEO警告:高GDP与高失业率将并存!
  • 2026年Java高频八股文+答案(万字长文,建议收藏)
  • 终极AI分层工具:3分钟让单张图片变专业PSD文件