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

Gin传参和接收参数的方式

Gin查询参数和接收参数的方式

常用 Gin 绑定方法对比

方法用途特点
c.Bind()自动识别 Content-Type最通用,根据请求头自动选择绑定方式
c.ShouldBindJSON()只绑定 JSON强制使用 JSON 格式,类型明确
c.ShouldBindXML()只绑定 XML强制使用 XML 格式
c.ShouldBindQuery()只绑定查询参数适用于 GET 请求的 URL 参数解析
c.ShouldBindUri()绑定 URI 参数解析路径参数(如 /user/:id
c.ShouldBindForm()只绑定表单数据专用于 form-data/x-www-form-urlencoded

1、request body 绑定——ShouldBindJSON

// CreateUserRequest 创建用户请求参数
type CreateUserRequest struct {Phone    string     `json:"phone" binding:"required"`Email    string     `json:"email" binding:"required,email"`Nickname string     `json:"nickname"`RealName string     `json:"realname"`Gender   string     `json:"gender" binding:"oneof=男 女"`Birth    *time.Time `json:"birth"`
}func CreateUser(c *gin.Context) {// 定义接收参数的结构体var reqUser CreateUserRequest// 绑定并验证请求body参数if err := c.ShouldBindJSON(&reqUser); err != nil {c.JSON(http.StatusBadRequest, gin.H{"status":     "error","message123": "请求参数错误",})return}// 创建用户实体user := repository.User{Phone:    reqUser.Phone,Email:    reqUser.Email,Nickname: reqUser.Nickname,RealName: reqUser.RealName,Gender:   reqUser.Gender,// 其他字段...}// 保存到数据库db := repository.GetDB()if err := db.Create(&user).Error; err != nil {c.JSON(http.StatusInternalServerError, gin.H{"status":  "error","message": "创建用户失败: " + err.Error(),})return}// 返回成功响应c.JSON(http.StatusCreated, gin.H{"status":  "success","message": "用户创建成功","id":      user.ID,})

2、路由参数

func main() {router := gin.Default()// 此 handler 将匹配 /user/john 但不会匹配 /user/ 或者 /userrouter.GET("/user/:name", func(c *gin.Context) {name := c.Param("name")c.String(http.StatusOK, "Hello %s", name)})// 此 handler 将匹配 /user/john/ 和 /user/john/send// 如果没有其他路由匹配 /user/john,它将重定向到 /user/john/router.GET("/user/:name/*action", func(c *gin.Context) {name := c.Param("name")action := c.Param("action")message := name + " is " + actionc.String(http.StatusOK, message)})router.Run(":8080")
}

3、Query和post form

请求内容:

POST /post?id=1234&page=1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
name=manu&message=this_is_great

接收:

func main() {router := gin.Default()router.POST("/post", func(c *gin.Context) {id := c.Query("id")page := c.DefaultQuery("page", "0")name := c.PostForm("name")message := c.PostForm("message")fmt.Printf("id: %s; page: %s; name: %s; message: %s", id, page, name, message)})router.Run(":8080")
}

结果:

id: 1234; page: 1; name: manu; message: this_is_great

http://www.dtcms.com/a/340701.html

相关文章:

  • K8S-Secret资源对象
  • 如何代开VSCode的settigns.json文件
  • 【运维】githubvercel学习使用
  • 数据结构--2:ArrayList与顺序表
  • 【机器学习深度学习】AI大模型高并发挑战:用户负载部署策略
  • 26_基于深度学习的茶叶等级检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 【JavaEE】多线程 -- CAS机制(比较并交换)
  • iPhone17系列超全准确预告
  • 【windows】只需两步繁杂的桌面开启清爽模式
  • 大数据常见问题分析与解决方案
  • 对抗式域适应 (Adversarial Domain Adaptation)
  • C++继承中的虚函数机制:从单继承到多继承的深度解析
  • VLN领域的“ImageNet”打造之路:从MP3D数据集、MP3D仿真器到Room-to-Room(R2R)、VLN-CE
  • Linux-文件查找find
  • pyqt 的自动滚动区QScrollArea
  • electron进程间通信-从主进程到渲染器进程
  • 康师傅2025上半年销售收入减少超11亿元,但净利润增长20.5%
  • qwen 千问大模型联网及json格式化输出
  • Https之(一)TLS介绍及握手过程详解
  • 【数据结构】排序算法全解析:概念与接口
  • 从0开始学习Java+AI知识点总结-20.web实战(多表查询)
  • HTTPS 原理
  • 模拟tomcat接收GET、POST请求
  • jvm三色标记
  • LLM常见名词记录
  • 《高中数学教与学》期刊简介
  • 109、【OS】【Nuttx】【周边】效果呈现方案解析:workspaceStorage(下)
  • Pytest项目_day20(log日志)
  • Redis--day9--黑马点评--分布式锁(二)
  • 基于门控循环单元的数据回归预测 GRU