DEV Community

Cover image for How to enable hot reload in your Gin project
sium_hossain
sium_hossain

Posted on

4

How to enable hot reload in your Gin project

Gin is one of the fastest frameworks in the Go world. However, there is one feature missing in Gin is hot realod. So that in this blog I can show you how can you enable hot reaload feature in your Gin project.

Suppose this is your main.go fie

package main

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

func successResponse(data interface{}) gin.H {
    return gin.H{
        "status": "success",
        "data": data,
    }
}

func successResponseWithMessageAndCode(data interface{}, message string, code int,c *gin.Context) {
    c.JSON(code, gin.H{
        "status": "success",
        "data": data,
        "message": message,
    })
}

func main() {
    r := gin.Default()
    fmt.Println("Hello World")
    r.GET("/", func(c *gin.Context) {
        data:= map[string]interface{}{
            "message": "Hello World",
        }
        successResponseWithMessageAndCode(data, "Success", http.StatusOK, c)
    })

    r.GET("/hello", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "Hello World",
        })
    })

    r.Run("localhost:8080")

}
Enter fullscreen mode Exit fullscreen mode

So we can use Air (https://github.com/air-verse/air) - Live reload for your Go apps

Install Air by using this command πŸ‘‡

go install github.com/air-verse/air@latest
Enter fullscreen mode Exit fullscreen mode

Then add .air.toml file using this command

air init
Enter fullscreen mode Exit fullscreen mode

If the air command is not found, it might be because the Go bin directory is not in your PATH

In that case I’m using fish terminal

First, let's find out where Go installs binaries. Run this command:

echo $GOPATH/bin
Enter fullscreen mode Exit fullscreen mode

If $GOPATH is not set, the default location is usually ~/go/bin.

Now, let's add this directory to your PATH in Fish. Open your Fish configuration file:

nano ~/.config/fish/config.fish
Enter fullscreen mode Exit fullscreen mode

Add the following line to the file:

set -gx PATH $PATH $GOPATH/bin
Enter fullscreen mode Exit fullscreen mode

If $GOPATH is not set, use the full path, like:

set -gx PATH $PATH ~/go/bin
Enter fullscreen mode Exit fullscreen mode

Save the file and exit the editor.
Reload your Fish configuration:

 ~/.config/fish/config.fish
Enter fullscreen mode Exit fullscreen mode

Now try running air again:

air
Enter fullscreen mode Exit fullscreen mode

If you are using bash terminal you have to edit your .~/bashrc file.

Now edit .air.toml file

root = "."
tmp_dir = "tmp"

[build]
cmd = "go build -o ./tmp/main ."
bin = "tmp/main"
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
include_ext = ["go", "tpl", "tmpl", "html"]
exclude_dir = ["assets", "tmp", "vendor"]
include_dir = []
exclude_file = []
log = "air.log"
delay = 1000 # ms
stop_on_error = true
send_interrupt = false
kill_delay = 500 # ms

[log]
time = false

[color]
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
clean_on_exit = true
Enter fullscreen mode Exit fullscreen mode

Ensure your Gin application listens on localhost instead of just :8080 for better hot-reload behavior

r.Run("localhost:8080")
Enter fullscreen mode Exit fullscreen mode

And now instead of run go run main.go , just run air and then see the magic.

Billboard image

The fastest way to detect downtimes

Join Vercel, CrowdStrike, and thousands of other teams that trust Checkly to streamline monitoring.

Get started now

Top comments (0)

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

πŸ‘‹ Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay