Vincular apenas query string
ShouldBindQuery vincula apenas os parâmetros de query string da URL a uma struct, ignorando completamente o corpo da requisição. Isso é útil quando você quer garantir que dados do corpo POST não sobrescrevam acidentalmente os parâmetros de query — por exemplo, em endpoints que aceitam tanto filtros de query quanto um corpo JSON.
Em contraste, ShouldBind em uma requisição GET também usa binding de query, mas em uma requisição POST ele verificará primeiro o corpo. Use ShouldBindQuery quando você quiser explicitamente vincular apenas a query, independentemente do método HTTP.
package main
import ( "net/http"
"github.com/gin-gonic/gin")
type Person struct { Name string `form:"name"` Address string `form:"address"`}
func main() { route := gin.Default() route.Any("/testing", startPage) route.Run(":8085")}
func startPage(c *gin.Context) { var person Person if err := c.ShouldBindQuery(&person); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return }
c.JSON(http.StatusOK, gin.H{ "name": person.Name, "address": person.Address, })}Teste
# GET with query parameterscurl "http://localhost:8085/testing?name=appleboy&address=xyz"# Output: {"address":"xyz","name":"appleboy"}
# POST with query parameters -- body is ignored, only query is boundcurl -X POST "http://localhost:8085/testing?name=appleboy&address=xyz" \ -d "name=ignored&address=ignored"# Output: {"address":"xyz","name":"appleboy"}