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")
}
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
Then add .air.toml
file using this command
air init
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
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
Add the following line to the file:
set -gx PATH $PATH $GOPATH/bin
If $GOPATH is not set, use the full path, like:
set -gx PATH $PATH ~/go/bin
Save the file and exit the editor.
Reload your Fish configuration:
~/.config/fish/config.fish
Now try running air again:
air
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
Ensure your Gin application listens on localhost
instead of just :8080
for better hot-reload behavior
r.Run("localhost:8080")
And now instead of run go run main.go
, just run air
and then see the magic.
Top comments (0)