Home > front end >  How to get an array of parameter values in gin
How to get an array of parameter values in gin

Time:07-25

I need to accept multiple cat_id values in the request, for example:

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

My func:

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,
    }
}

My struct:

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

Request in my function:

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

I looked at many articles on the Internet, but not a single piece of advice helped me.

CodePudding user response:

queryValue is a string, you can apply whatever action you see fit on it :

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
}

I don't know if Gin has a built in function to do something like the above

  • Related