DEV Community

Quang Hieu (Bee)
Quang Hieu (Bee)

Posted on

1

Gin and router example

Image description

  • Install Gin with the following command:
go get -u github.com/gin-gonic/gin
Enter fullscreen mode Exit fullscreen mode
  • After installation, we proceed to code in the “main.go” file with a simple function as follows:
package main

import (
  "net/http"

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

func main() {
  r := gin.Default()
  r.GET("/ping", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
      "message": "pong",
    })
  })
  r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

Enter fullscreen mode Exit fullscreen mode
  • Then run the main file with the following command:
go run cmd/server/main.go
Enter fullscreen mode Exit fullscreen mode

Note: Depending on your folder organization, the command to run the main.go file may differ from mine. I have introduced how to organize the structure in the article: here

  • After running the above command, we will receive the following result:

Image description

  • Great, let's try calling the ping endpoint with the following command:
curl http://localhost:8080/ping
Enter fullscreen mode Exit fullscreen mode
  • The result received will be:

Image description

  • Now, let's try to split the simple router:
package main

import (
    "net/http"

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

func main() {
    r := gin.Default()

    v1 := r.Group("/v1")
    {
        v1.GET("/ping", Pong) // curl http://localhost:8080/v1/ping
    }
    r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

func Pong(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "message": "pong",
    })
}

Enter fullscreen mode Exit fullscreen mode

Note: After changing the code as above, remember to run the command: "go run cmd/server/main.go" to apply the new code.

  • Next, let's try running the new router with the following command:
curl http://localhost:8080/v1/ping
Enter fullscreen mode Exit fullscreen mode
  • The result received will be:

Image description

  • Now, let's try to get the parameter from Param:
package main

import (
    "net/http"

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

func main() {
    r := gin.Default()

    v1 := r.Group("/v1")
    {
        v1.GET("/ping/:name", Pong) // curl http://localhost:8080/v1/ping
    }
    r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

func Pong(c *gin.Context) {
    name := c.Param("name")
    c.JSON(http.StatusOK, gin.H{
        "message": "pong:::: " + name,
    })
}

Enter fullscreen mode Exit fullscreen mode

Note: After changing the code as above, remember to run the command: "go run cmd/server/main.go" to apply the new code.

  • Try to get the param with the following command:
curl http://localhost:8080/v1/ping/hieunguyen
Enter fullscreen mode Exit fullscreen mode
  • The result received will be:

Image description

  • Next, we will try to get the parameter from the Query:
package main

import (
    "net/http"

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

func main() {
    r := gin.Default()

    v1 := r.Group("/v1")
    {
        v1.GET("/ping", Pong) // curl http://localhost:8080/v1/ping
    }
    r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

func Pong(c *gin.Context) {
    id := c.Query("id")
    c.JSON(http.StatusOK, gin.H{
        "message": "pong:::: " + id,
    })
}

Enter fullscreen mode Exit fullscreen mode

Note: After changing the code as above, remember to run the command: "go run cmd/server/main.go" to apply the new code.

  • Try to get the query with the following command:
curl http://localhost:8080/v1/ping\?id=12345
Enter fullscreen mode Exit fullscreen mode
  • The result received will be:

Image description

You can directly refer to Gin on GitHub with the following link:here

Give me a reaction and a follow for motivation 😘

If you found this article useful and interesting, please share it with your friends and family. I hope you found it helpful. Thanks for reading 🙏

Let's get connected! You can find me on:

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay