Hanya bind query string
ShouldBindQuery hanya melakukan bind parameter query string URL ke struct, mengabaikan body request sepenuhnya. Ini berguna ketika Anda ingin memastikan bahwa data body POST tidak secara tidak sengaja menimpa parameter query — misalnya, pada endpoint yang menerima filter query dan body JSON.
Sebaliknya, ShouldBind pada request GET juga menggunakan binding query, tetapi pada request POST akan memeriksa body terlebih dahulu. Gunakan ShouldBindQuery ketika Anda secara eksplisit menginginkan binding khusus query terlepas dari metode 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, })}Uji coba
# 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"}