Gin POST 请求完整流程笔记

这篇笔记梳理了 POST 请求在 Gin 中的完整流程,从 URL 匹配、数据发送,到结构体绑定和返回响应,帮助你理清前后端交互过程。


1. URL 路径决定调用哪个函数

Gin 根据请求的 URL 路径匹配路由,找到对应的处理函数执行。

go 复制代码
r.POST("/register", controller.Register)  // /register → Register()
r.POST("/login", controller.Login)        // /login → Login()

使用 curl 测试:

bash 复制代码
curl -X POST http://localhost:9000/register  # 路径 /register → 调 Register
curl -X POST http://localhost:9000/login     # 路径 /login → 调 Login

URL 路径就是"门牌号",告诉 Gin 请求该交给哪个处理函数。


2. curl 发送 POST 数据的两种方式

方式 1:直接在命令里写 JSON

bash 复制代码
curl.exe -X POST http://localhost:9000/register \
-H "Content-Type: application/json" \
-d '{"username":"lisi","password":"123456"}'

方式 2:用 JSON 文件

bash 复制代码
# data.json 内容:
# {"username":"lisi","password":"123456"}

curl.exe -X POST http://localhost:9000/register \
-H "Content-Type: application/json" \
--data-binary "@data.json"

@ 表示从文件读取数据发送。


3. curl 命令逐块解析

示例命令:

bash 复制代码
curl.exe -X POST http://localhost:9000/v1/todo \
-H "Content-Type: application/json" \
--data-binary "@data.json"
部分 说明
curl.exe curl 工具
-X POST 发 POST 请求
http://localhost:9000/v1/todo 请求地址(URL)
-H "Content-Type: application/json" 请求头:告诉服务器我发的是 JSON
--data-binary "@data.json" 从文件读取 JSON 数据,放入请求 Body

4. c.ShouldBindJSON(&body) 接收数据

在 Gin 后端:

go 复制代码
func Register(c *gin.Context) {
    var body struct {
        Username string `json:"username"`
        Password string `json:"password"`
    }
    c.ShouldBindJSON(&body)

    // 此时:
    // body.Username = "lisi"
    // body.Password = "123456"
}

赋值过程:

  1. Gin 读取请求 Body
  2. 根据结构体标签 json:"..." 匹配字段
  3. 将 JSON 数据填入结构体字段
  4. 结构体现在就可以直接使用

5. POST 请求完整流程

txt 复制代码
终端输入:
  curl -X POST /register -d '{"username":"lisi","password":"123456"}'
       ↑ 路径                    ↑ Body 数据

Gin 收到请求:
  → 匹配 POST /register → 找到 Register 函数
  → c.ShouldBindJSON(&body) → 把 Body 装进结构体
  → body.Username = "lisi", body.Password = "123456"
  → 处理业务逻辑
  → c.JSON 返回结果给前端

这就是 POST 请求从发送到返回的完整流程。


6. 对应前端 fetch

curl 命令 前端 JS fetch
-X POST method: 'POST'
-H "Content-Type: application/json" headers: { 'Content-Type': 'application/json' }
--data-binary "@data.json" body: JSON.stringify({...})
URL fetch('/register', {...})

理解 curl 和 fetch 的对应关系,便于测试接口和前端开发对接。

相关推荐
Answer1st4 小时前
【嵌入式模块】UART通信模块
笔记
Frag0ut4 小时前
Chrome 2026 AI 能力全解析:从 Auto Browse 到 Skills,浏览器正在变成智能代理
chrome·ai·谷歌浏览器·gemini·智能代理·skills·auto browse
和侧4 小时前
离子注入后为什么必须配套退火工艺?
笔记·学习
TheBlackHoleLab8 小时前
【Vulnhub系列】DarkHole1: 渗透测试笔记,没有踩渗透的坑,却踩到了虚拟机平台的坑,人生处处是大坑
笔记·vulnhub·easy·darkhole1
ACP广源盛139246256739 小时前
硬件选型笔记:GSV2231@ACP,DP1.4 MST 一进三出多屏扩展方案评估
笔记·硬件架构·视频·mst·国产芯片
Awh-10 小时前
ARM 裸机开发 DAY11 学习笔记
arm开发·笔记·学习
志尊宝10 小时前
Vue3 零基础每日笔记(087):Vue3 高频面试题(下)
前端·javascript·vue.js·笔记·ecmascript·#vue.js
叶子丶苏10 小时前
VibeCoding实战三个AI小项目-VibeCoding入门笔记02
大数据·人工智能·笔记
Mr清奇10 小时前
AI辅助开发笔记(1)开发工具和配置
大数据·笔记·intellij idea
Go Work11 小时前
我把 @RefreshScope 挂错了类,新值一直灌不进去
经验分享·笔记