我需要接受请求中的多个cat_id值,例如:

localhost:8080/products/?cat_id=1,2

我的职能:

func GenerateMultiParams(c *gin.Context) models.Params {
    limit := 0
    page := 1
    cat_id := 1
    query := c.Request.URL.Query()
    for key, value := range query {
        queryValue := value[len(value)-1]
        switch key {
        case "limit":
            limit, _ = strconv.Atoi(queryValue)
        case "page":
            page, _ = strconv.Atoi(queryValue)
        case "cat_id":
            cat_id, _ = strconv.Atoi(queryValue)
        }
    }
    return models.Params{
        Limit:  limit,
        Page:   page,
        Cat_id: []cat_id,
    }
}

我的 struct :

type Params struct {
    Limit  int   `json:"limit"`
    Page   int   `json:"page"`
    Cat_id []int `json:"cat_id"`
}

在我的函数中请求:

result := config.DB.Model(&models.Products{}).Where(q).Where("cat_id=?", pagination.Cat_id).Limit(pagination.Limit).Offset(offset).Find(&prod)

我在网上看了很多文章,但没有一条建议对我有帮助.

推荐答案

queryValue是一个字符串,您可以在其上应用任何您认为合适的操作:

func toIntArray(str string) []int {
    chunks := strings.Split(str, ",")

    var res []int
    for _, c := range chunks {
        i, _ := strconv.Atoi(c) // error handling ommitted for concision
        res = append(res, i)
    }

    return res
}

我不知道Gin是否有一个内置的功能来做上述事情

Go相关问答推荐

Golang regexpp:获取带有右括号的单词

你能帮我优化一个golang代码关于函数CrossPointTwoRect

Hugo错误:没有为此项目配置现有内容目录

Golang:访问any类型泛型上的字段

如何创建在responseWriter.Write 上返回错误的http.ResponseWriter 模拟实例?

Go 中如何判断 struct 体是否包含另一个 struct 体?

Go 中的 protobuf FieldMask 解组

Docker 执行失败并显示cmd/ENTRYPOINT 中的命令未找到

为什么 mux.Vars() 返回空的 map[]

使用 httptest 对 http 请求进行单元测试重试

Opensearch 错误 ping 弹性服务器:由未知权威签署的 x509 证书

当填充通道的函数调用未嵌入 goroutine 时,为什么我会遇到死锁?

将文本文件放入切片然后进行比较

如何使用管理员权限启动 powershell 进程并重定向标准输入 (os.exec)

使用自定义处理程序 nats golang 保留订阅方法

如何在 golang revel 中获取动态应用程序配置

使用 oklog/run 来自 Go 编译器的错误(无值)用作值

如何优雅地映射到 Go 中返回可变长度数组的方法?

Golang 查询扫描未将查询正确扫描到 struct 中

如何在 Prometheus 中正确检测区域和环境信息?