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

gin入门教程(5):请求参数处理

在 Gin 中,处理请求参数非常简单。您可以从 URL 路由、查询字符串和请求体中提取参数。以下是几种常见的处理方式:

1. URL 路由参数

如果您想从 URL 中获取参数,可以使用路由定义中的冒号(:)符号:

r.GET("/users/:id", getUser)

处理函数示例:

func getUser(c *gin.Context) {
    id := c.Param("id") // 获取 URL 参数
    // 处理逻辑,例如查找用户
    c.JSON(200, gin.H{"user_id": id})
}
2. 查询字符串参数

您可以从请求的查询字符串中获取参数,例如:

r.GET("/search", searchUsers)

处理函数示例:

func searchUsers(c *gin.Context) {
    name := c.Query("name") // 获取查询参数
    // 处理逻辑,例如根据名称搜索用户
    c.JSON(200, gin.H{"search_name": name})
}
3. 请求体参数(JSON)

如果客户端发送 JSON 数据,您可以将其绑定到结构体中:

r.POST("/users", createUser)

处理函数示例:

type User struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}

func createUser(c *gin.Context) {
    var user User
    if err := c.ShouldBindJSON(&user); err == nil {
        // 处理用户创建逻辑
        c.JSON(201, user)
    } else {
        c.JSON(400, gin.H{"error": err.Error()})
    }
}
4. 组合示例

以下是一个完整的示例,展示了 URL 参数、查询字符串和请求体参数的处理:

package main

import (
    "github.com/gin-gonic/gin"
)

type User struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}

func main() {
    r := gin.Default()

    r.POST("/users", createUser)
    r.GET("/users/:id", getUser)
    r.GET("/search", searchUsers)

    r.Run(":8080")
}

func createUser(c *gin.Context) {
    var user User
    if err := c.ShouldBindJSON(&user); err == nil {
        c.JSON(201, user)
    } else {
        c.JSON(400, gin.H{"error": err.Error()})
    }
}

func getUser(c *gin.Context) {
    id := c.Param("id")
    c.JSON(200, gin.H{"user_id": id})
}

func searchUsers(c *gin.Context) {
    name := c.Query("name")
    c.JSON(200, gin.H{"search_name": name})
}

总结

以上是 Gin 中处理请求参数的基本方法。您可以根据需要自由组合和使用这些功能,以实现更复杂的请求处理逻辑,大家有问题欢迎评论区留言。


http://www.kler.cn/news/362586.html

相关文章:

  • 力扣hot100--DFS/BFS
  • java设计模式——装饰者模式
  • RabbitMQ 发布确认模式
  • 写一个 qq自动回话的程序
  • 第四十三条:方法引用优先于Lambda
  • etcd入门到实战
  • stm32F103 实现呼吸灯效果
  • ubuntu 22.04网线连接无ip、网络设置无有线网界面(netplan修复)
  • 求最大公约数(c语言)
  • LINUX设备OTA时无法从HTTP服务器(TOMCAT)下载文件
  • GRU神经网络理解
  • LabVIEW提高开发效率技巧----插入式架构
  • 力扣 简单 70.爬楼梯
  • 1024是什么日子
  • 数据结构《顺序表》
  • 通过微信小程序实现对接企业微信客服
  • 【Java Script引擎有哪些】
  • JavaWeb合集11-Maven高级
  • MySQL 的意向锁(Intention Locks)原理详解
  • Flink 状态精准一次性特性
  • 线性可分支持向量机的原理推导【补充知识部分】9-10最大化函数max α,β L(x,α,β)关于x的函数 公式解析
  • C++——NetWork
  • Mac 使用 zsh 终端提示 zsh: killed 的问题
  • 微信小程序设置弹框底下内容不能移动 滚动(滚动穿透问题)
  • 【鼠鼠学AI代码合集#8】线性神经网络
  • Vue封装组件并发布到npm仓库