Description

I'm trying to use GetUint64 and GetUint but it returns 0

How to reproduce

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    g := gin.Default()
    g.GET("/hello", func(c *gin.Context) {
        c.String(200, "Your ID is %d %d", c.GetUint64("user"), c.GetUint("user"))
    })
    g.Run(":9000")
}

Expectations

$ curl http://localhost:9000/hello?user=1
Your ID is 1 1

Actual result

$ curl -i http://localhost:9000/hello?user=1
Your ID is 0 0

Environment

  • go version: 1.21
  • gin version (or commit ref): 1.9.1
  • operating system: Windows

Comment From: RedCrazyGhost

There is a problem with your usage, you should use BindQuery or ShouldBindQuery.

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func main() {
    g := gin.Default()
    g.GET("/hello", func(c *gin.Context) {
        m := make(map[string]string)
        if err := c.BindQuery(&m); err != nil {
            c.String(http.StatusInternalServerError,"input data have error: %v",err)
            return 
        }
        c.String(http.StatusOK,"input data: %v",m["user"])
    })
    g.Run(":9000")
}

If you use c.Get, you need to use your c.Set in context

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func main() {
    g := gin.Default()
    g.GET("/hello", func(c *gin.Context) {
        c.Set("user",999)
        c.String(http.StatusOK,"user id: %d",c.GetInt("user"))
    })
    g.Run(":9000")
}

Comment From: ChenPuChu

That's it, I want to try to solve this problem /cc @JimChenWYU

Comment From: ChenPuChu

That's it, I want to try to solve this problem /cc @JimChenWYU

You should use Query to get the parameters of the GET request instead of using Get.

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
)

func main() {
    g := gin.Default()
    g.GET("/hello", func(c *gin.Context) {
        c.String(200, "Your ID is %s",c.Query("user"))
        fmt.Println("=========================================")
    })
    g.Run(":9000")
}

/cc @bayaderpack