电商商城定制开发golang gin框架获取请求中所有参数

问题

  • gin 电商商城定制开发框架如何获取全部请求参数?
    电商商城定制开发当明确接口的时候我们可以定义一个结构体去绑定参数到定义好的结构体中。
  • 如果是在中间件中要获取全部参数另做他用,比如验签等操作,动态去获取全部参数时如何做呢?
    gin框架只提供了根据key获取参数的方法,所以我们需要自己定义方法去获取全部参数,下面以gin框架获取get请求中所有参数为例把全部query参数获取并绑定到一个map[string]any(go 1.18版本前为 map[string]interface{} 写法)中。

解决方法

根据gin c.GetQuery(key) 源码可以看到最终框架在初始化query参数时走到了 c.Request.URL.Query()中,如下图

因此我们想获取全部query参数到一个map[string]any(go 1.18版本前为 map[string]interface{} 写法)中可以如下写法:

package requestimport "github.com/gin-gonic/gin"func GetQueryParams(c *gin.Context) map[string]any {	query := c.Request.URL.Query()	var queryMap = make(map[string]any, len(query))	for k := range query {		queryMap[k] = c.Query(k)	}	return queryMap}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

需要获取post提供的所有参数怎么操作,我想大家应该知道了吧?


func GetPostFormParams(c *gin.Context) (map[string]any, error) {	if err := c.Request.ParseMultipartForm(32 << 20); err != nil {		if !errors.Is(err, http.ErrNotMultipart) {			return nil, err		}	}	var postMap = make(map[string]any, len(c.Request.PostForm))	for k, v := range c.Request.PostForm {		if len(v) > 1 {			postMap[k] = v		} else if len(v) == 1 {			postMap[k] = v[0]		}	}	return postMap, nil}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发