Golang 关于Gin框架请求参数的获取方法

Golang 关于Gin框架请求参数的获取方法

Gin框架请求参数的获取

Gin是一个用Go语言编写的Web框架,它提供了强大的路由和中间件功能,使得开发Web应用变得更加简单和高效。
在使用Gin框架开发Web应用时,处理请求参数是一个非常重要的环节。本文将结合实际案例,详细介绍在Go语言中如何使用Gin框架处理请求参数。

一、请求参数的类型和位置

在HTTP请求中,参数可以通过多种方式传递,常见的类型包括:

URL Path参数:参数直接写在请求路径中,例如/user/:id。
URL Query参数:参数跟在URL的?后面,以键值对的形式传递,多个参数之间用&分隔,例如/user/list?name=John&gender=男。
HTTP Body参数:参数在请求体中传递,通常用于POST、PUT等请求方法,内容格式可以是JSON、XML等。
Header参数:参数在HTTP请求头中传递,例如Content-Type、Accept等。

二、获取请求参数的方法

Gin框架提供了多种方法来获取请求参数,包括直接获取和绑定到结构体中两种方式。

1. 直接获取请求参数

(1)获取URL Path参数

URL Path参数是指直接写在请求路径中的参数,可以通过Gin框架的Param方法获取。
后台获取路径请求参数通过ctx.Param(“参数名”) 来获取

示例代码:

package main
import (
    "github.com/gin-gonic/gin"
    "net/http"
)
func main() {
    engine := gin.Default()
    //请求参数 用:变量名 表示
    engine.GET("/user/:id", func(ctx *gin.Context) {
        //后台获取请求参数通过ctx.Param("参数名") 来获取
        id := ctx.Param("id")
        //响应到页面
        //fmt.Fprintf(ctx.Writer, "你的请求id: %s", id)
        ctx.String(http.StatusOK, "您的id是%s", id)
    })
    engine.Run()
}

运行后,发起请求http://localhost:8080/user/100,会返回你的请求id: 100。

Golang 关于Gin框架请求参数的获取方法

(2)获取URL Query参数

URL Query参数是指跟在URL的?后面的键值对集合,可以通过Gin框架的Query、DefaultQuery、QueryArray、QueryMap等方法获取。

示例代码:

package main
import (
    "fmt"
    "github.com/gin-gonic/gin"
    "net/http"
)
func main() {
    engine := gin.Default()
    engine.GET("/user/list", func(ctx *gin.Context) {
        name := ctx.Query("name")
        gender := ctx.DefaultQuery("gender", "男")
        habits := ctx.QueryArray("habits")
        fmt.Printf("name: %s, gender: %s, habits: %v\n", name, gender, habits)
        works := ctx.QueryMap("works")
        //响应到页面
        ctx.String(http.StatusOK, "%s, %s, %v, %s\n", name, gender, habits, works)
    })
    engine.Run(":8080")
}

运行后,浏览器发起请求
http://127.0.0.1:8080/user/list?name=John&gender=男&habits=reading&habits=sports&works[teacher]=math&works[engineer]=computer
会返回 John, 男, [reading sports], map[engineer:computer teacher:math]

Golang 关于Gin框架请求参数的获取方法

(3)获取HTTP Body参数

HTTP Body参数是指请求体中的参数,通常用于POST、PUT等请求方法。可以通过Gin框架的PostForm、DefaultPostForm、PostFormArray、PostFormMap等方法获取。

示例代码:

package main
import (
    "fmt"
    "github.com/gin-gonic/gin"
)
func main() {
    engine := gin.Default()
    //使用post请求
    engine.POST("/user/add", func(ctx *gin.Context) {
        name := ctx.PostForm("name")
        gender := ctx.DefaultPostForm("gender", "男")
        //获取切片数据
        habits := ctx.PostFormArray("habits")
        //获取map数据
        works := ctx.PostFormMap("works")
        fmt.Printf("%s, %s, %v, %s\n", name, gender, habits, works)
    })
    engine.Run()
}

postman发请求

Golang 关于Gin框架请求参数的获取方法

(4)获取Header参数

Header参数是指HTTP请求头中的参数,可以通过Gin框架的GetHeader方法获取。

示例代码:

package main
import (
    "github.com/gin-gonic/gin"
    "net/http"
)
func main() {
    engine := gin.Default()
    engine.POST("/getHeader", func(ctx *gin.Context) {
        //拿到请求头参数数据
        userAgent := ctx.GetHeader("User-Agent")
        ctx.String(http.StatusOK, "User-Agent: %s", userAgent)
    })
    engine.Run()
}

Golang 关于Gin框架请求参数的获取方法

2. 绑定请求参数到结构体

Gin框架支持将请求参数自动绑定到结构体中,这样可以更方便地进行参数验证和处理。绑定参数的方法包括Bind、ShouldBind、BindJSON、BindQuery等。

(1)绑定URL Query参数到结构体

示例代码:

package main
import (
    "github.com/gin-gonic/gin"
    "net/http"
)
// User 定义结构体,使用form标签指定参数名,以便正确地绑定参数 get请求使用功能form标签
type User struct {
    Id    int64  `form:"id"`
    Name  string `form:"name"`
    Age   int    `form:"age"`
    Email string `form:"email"`
}
func main() {
    engine := gin.Default()
    engine.GET("/user/info", func(ctx *gin.Context) {
        var user User
        //将结构体对象指针传进去
        if err := ctx.ShouldBindQuery(&user); err != nil {
            ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        //以json字符串的方式响应给客户端这个结构体对象
        ctx.JSON(http.StatusOK, user)
    })
    engine.Run()
}

Golang 关于Gin框架请求参数的获取方法

(2)绑定HTTP Body参数到结构体(JSON格式)

当前端请求的数据通过JSON提交时,例如向/json发送一个POST请求

示例代码:

package main
import (
    "github.com/gin-gonic/gin"
    "net/http"
)
// User 绑定HTTP Body参数到结构体 ,创建结构体时需要用json标签
type User struct {
    Id    int64  `json:"id"`
    Name  string `json:"name"`
    Age   int    `json:"age"`
    Email string `json:"email"`
}
func main() {
    engine := gin.Default()
    engine.POST("/user/add", func(ctx *gin.Context) {
        var user User
        // ctx.ShouldBindJSON(&user) 将结构体指针传进去
        if err := ctx.ShouldBindJSON(&user); err != nil {
            ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        //响应给客户端结构体
        ctx.JSON(http.StatusOK, user)
    })
    engine.Run()
}

Golang 关于Gin框架请求参数的获取方法

也可以直接获取原生json数据处理

package main
import (
    "encoding/json"
    "github.com/gin-gonic/gin"
    "net/http"
)
func main() {
    engine := gin.Default()
    engine.POST("/json", func(ctx *gin.Context) {
        // GetRawData : 从c.Request.Body读取请求数据, 返回 []byte
        // func (c *Context) GetRawData() ([]byte, error)
        b, _ := ctx.GetRawData()
        // 定义map或结构体接收
        var m map[string]interface{}
        // 将接收的b json反序列化为map数据
        _ = json.Unmarshal(b, &m)
        ctx.JSON(http.StatusOK, m)
    })
    engine.Run()
}

Golang 关于Gin框架请求参数的获取方法

到此这篇关于Golang 关于Gin框架请求参数的获取的文章就介绍到这了,更多相关Golang Gin框架请求参数内容请搜索恩蓝小号以前的文章或继续浏览下面的相关文章希望大家以后多多支持恩蓝小号!

原创文章,作者:IOODW,如若转载,请注明出处:https://www.wangzhanshi.com/n/5456.html

(0)
IOODW的头像IOODW
上一篇 2024年12月17日 19:27:34
下一篇 2024年12月17日 19:27:36

相关推荐

  • Go语言中缓冲bufio的原理解读与应用实战

    bufio是Go语言标准库中的一个重要包,它提供了带缓冲的I/O操作,用于包装io.Reader或io.Writer对象,以减少I/O操作的次数,从而提高读写性能。本文将结合实际案…

    2024年12月17日
  • Golang中Gin框架中如何定义路由详解

    Gin是一个用Go语言编写的Web框架,具有高性能和易于使用的特点。在Gin框架中,路由是核心功能之一,通过路由可以将不同的URL路径绑定到相应的处理函数上。本文将结合实际案例,详…

    2024年12月17日
  • Go语言如何使用 Viper 来管理配置

    在现代软件开发中,良好的配置管理可以极大地提升应用的灵活性和可维护性。 在 Go 语言中,Viper 是一个功能强大且广泛使用的配置管理库,它支持从多个来源读取配置,包括文件、环境…

    Golang 2024年12月17日
  • Go语言使用sqlx操作MySQL

    Go 语言以其高效和简洁的语法逐渐受到开发者的青睐。在实际开发中,数据库操作是不可避免的任务之一。虽然标准库提供了 database/sql 包来支持数据库操作,但使用起来略显繁琐…

    Golang 2024年12月17日
  • Go语言使用GORM操作数据库使用指南

    简介 GORM(全称为Go Object Relational Mapping)是一个在Go语言中使用的轻量级的对象关系映射(ORM)库。ORM是一种编程技术,用于将对象模型与关系…

    Golang 2024年12月26日
  • 一文带你了解Go语言中的函数

    1. 引言 函数是编程中不可或缺的组成部分,无论是在Go语言还是其他编程语言中,函数都扮演着重要的角色。函数能够将一系列的操作封装在一起,使得代码更加模块化、可重用和易于维护。 在…

    Golang 2024年12月26日
  • Go语言中命令行参数解析工具pflag的使用指南

    在使用 Go 进行开发的过程中,命令行参数解析是我们经常遇到的需求。尽管 Go 标准库提供了 flag 包用于实现命令行参数解析,但只能满足基本需要,不支持高级特性。于是 Go 社…

    Golang 2024年12月17日
  • go开发过程中mapstructure使用示例详解

    mapstructure用法 mapstructure 是一个流行的 Go 库,主要用于将映射(如 map 或 struct)解码为结构体。它通常用于从配置文件(如 JSON、YA…

    Golang 2024年12月17日
  • Golang中Options模式的使用

    在软件开发领域,选项模式(Options Pattern)是一种常见的设计模式,它允许用户通过提供一系列选项来自定义函数、类型或对象的行为。在Golang中,选项模式的应用非常广泛…

    Golang 2024年12月17日
  • GO中的时间操作总结(time&dateparse)

    〇、前言 日常开发过程中,对于时间的操作可谓是无处不在,但是想实现时间自由还是不简单的,多种时间格式容易混淆,那么本文将进行梳理,一起学习下。 官方提供的库是 time,功能很全面…

    2024年12月26日

发表回复

登录后才能评论