DEV Community

menarayanzshrestha
menarayanzshrestha

Posted on

Hot Reload using Air in golang

Hot reloading is the important and most frequently used feature. We play and change different messages, logic inside our code. There is an easy way to implement it.

At first let us create a http server on golang:

Create a file named “server.go” inside which copy the below code:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello, Golang Dev"))
    })

    PORT := "5000"

    fmt.Println("Serverr running on port:", PORT)

    http.ListenAndServe(":" + PORT, nil)

}

Enter fullscreen mode Exit fullscreen mode

This will create a http-server hosted on port “5000”. To run server

go run server.go

You can see the message : “Server running on port: 5000”. To verify it go to the browser and hit the url : http://localhost:5000/ . You can see “Hello, Golang Dev” as response. Its working right ??

Now if you want to change that message to “Hello World” . You need to restart server which is time consuming. There are many ways to hot reload. Here will talk about the “Air”.

Air is a command-line utility that provides live reloading for Go applications. To install it

go get -u github.com/cosmtrek/air

Next create .air.conf on the root directory

# .air.conf
# Config file for [Air](https://github.com/cosmtrek/air) in TOML format

# Working directory
# . or absolute path, please note that the directories following must be under root.
root = "." 
tmp_dir = "tmp"

[build]
# Just plain old shell command. You could use `make` as well.
cmd = "go build -o ./tmp/main ."
# Binary file yields from `cmd`.
bin = "tmp/main"
# Customize binary.
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
# Watch these filename extensions.
include_ext = ["go", "tpl", "tmpl", "html"]
# Ignore these filename extensions or directories.
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
# Watch these directories if you specified.
include_dir = []
# Exclude files.
exclude_file = []
# It's not necessary to trigger build each time file changes if it's too frequent.
delay = 1000 # ms
# Stop to run old binary when build errors occur.
stop_on_error = true
# This log file places in your tmp_dir.
log = "air_errors.log"

[log]
# Show log time
time = false

[color]
# Customize each part's color. If no color found, use the raw app log.
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
# Delete tmp directory on exit
clean_on_exit = true
Enter fullscreen mode Exit fullscreen mode

First check air is install properly or not.

air -v

If it works yo are ready to go. Else you need to setup for path for “air”

sudo mv ~/go/bin/air /usr/local/bin
Recheck

air -v
Finally, instead of running our Go application with the usual “go run server.go” command, use the “air” command.

air
Hope it works.

Happy Coding

Top comments (0)