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

Go语言 Gin处理请求参数

Go语言 Gin处理请求参数

1.获取Get 请求参数

获取Get请求参数的常用3个函数:

  • func (c *Context) Query(key string) string
  • func (c *Context) DefaultQuery(key, defaultValue string) string
  • func (c *Context) GetQuery(key string) (string, bool)

2.获取Post请求参数

获取Post请求参数的常用3个函数,与Get获取参数类似:

  • func (c *Context) PostForm(key string) string
  • func (c *Context) DefaultPostForm(key, defaultValue string) string
  • func (c *Context) GetPostForm(key string) (string, bool)

3.获取URL路径参数

获取URL路径参数,指的是获取 /user/:id 这类型路由绑定的参数,这个例子绑定了一个参数id。

获取url路径参数常用函数:

  • func (c *Context) Param(key string) string

4.将请求参数绑定到struct对象

前面获取参数的方式都是一个个参数的读取,实际应用中,Gin框架支持将请求参数自动绑定到一个struct对象,这种方式支持Get/Post请求,也支持http请求body内容为json/xml格式的参数。

示例

package main

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

/*
gin 获取请求参数
*/
func main() {
	// 1.初始化实例
	r := gin.Default()

	// 2.路由。localhost:8080/get?name=xiao
	r.GET("/get", func(c *gin.Context) {
		// 直接通过Query获取
		name := c.Query("name")
		c.JSON(http.StatusOK, gin.H{
			"parms_name": name,
		})
	})
	// 1)正常取值:localhost:8080/title?title=xiao
	// 2) 无值,则取设置的默认值(default_title):localhost:8080/title
	r.GET("/title", func(c *gin.Context) {
		// 带默认值的参数获取
		title := c.DefaultQuery("title", "default_title")
		c.JSON(http.StatusOK, gin.H{
			"title": title,
		})
	})
	// 1)返回参数判断是否有值
	// 2) 参数不存在:localhost:8080/value
	// 3) 参数存在: localhost:8080/value?value=xiao
	r.GET("/value", func(c *gin.Context) {
		value, ok := c.GetQuery("value")
		if !ok {
			// 如果参数不存在
			c.JSON(http.StatusOK, gin.H{
				"message": "value not exist.",
			})
			return
		}
		c.JSON(http.StatusOK, gin.H{
			"value": value,
		})
	})
	// 1)post 默认,取参数值
	r.POST("/post", func(c *gin.Context) {
		// 直接获取post form参数值,为string类型
		name1 := c.PostForm("name")

		c.JSON(http.StatusOK, gin.H{
			"name1": name1,
		})
	})
	// 2)post 带默认值,取参数值
	r.POST("/defaultPost", func(c *gin.Context) {
		// 设置默认值,获取参数
		name2 := c.DefaultPostForm("name", "default_name")

		c.JSON(http.StatusOK, gin.H{
			"name2": name2,
		})
	})
	// 3)post 判断是否存在值,取参数值
	r.POST("/getPost", func(c *gin.Context) {
		// 判断参数是否在
		name3, ok := c.GetPostForm("name")
		if !ok {
			// 参数不存在
			c.JSON(http.StatusOK, gin.H{
				"message": "name param not exist.",
			})
			return
		}
		c.JSON(http.StatusOK, gin.H{
			"name3": name3,
		})
	})
	// 获取请求url中的值
	r.GET("/user/:id", func(c *gin.Context) {
		// 获取请求url中的参数id
		id := c.Param("id")
		c.JSON(http.StatusOK, gin.H{
			"id": id,
		})
	})
	// 绑定struct对象
	type User struct {
		Name string `json:"name" form:"name"`
		Age  int    `json:"age" form:"age"`
	}
	// 绑定参数:localhost:8080/user
	/*
		{
		    "name":"xi",
		    "age":18
		}
	*/
	r.POST("/user", func(c *gin.Context) {
		// 初始化对象
		u := User{}
		// 通过 ShouldBind 函数,将请求参数绑定到 struct 对象。
		if c.ShouldBind(&u) == nil {
			// 绑定成功,输出请求参数
			c.JSON(http.StatusOK, gin.H{
				"name": u.Name,
				"age":  u.Age,
			})
			return
		}
		c.JSON(http.StatusOK, gin.H{
			"message": "绑定失败",
		})
	})

	// 3.启动服务
	r.Run(":8080")
}

相关文章:

  • 盘点导致Spring事务失效的4个场景
  • 网上到处转行编程成功的,现实中真的容易吗?
  • 智慧车行预约小程序,汽车保养、维修、美容、检测预测小程序,前后端完整代码包括车行动态,养车常识,保养预约,维修预约,洗车美容预约
  • 【Oracle】Oracle学习笔记
  • 设计vue3组件
  • mysql5.7主从复制配置
  • 如何写SCI论文
  • React18:创建React项目(自动)
  • Java+Swing+mysql会员卡管理系统
  • pycharm 中sqlite升级方法
  • Zookeeper 4 Zookeeper JavaAPI 操作 4.8 分布式锁
  • 做好程序中的axios错误提示
  • Zookeeper 4 Zookeeper JavaAPI 操作 4.5 Curator API 常用操作【修改节点】
  • 自学编程的人成千上万,为什么坚持下来的没几个?
  • vue3中常用的三种组件传值方式
  • R语言ggplot2可视化:ggcharts包的lollipop_chart函数可视化棒棒糖图、lollipop_chart函数自动排序线条并水平显示
  • OLSR路由协议学习
  • 实验三 多层神经网络
  • 【Kafka】Linux下搭建kafka服务,完整学习案例
  • 2023年互联网与软件业的机遇与挑战