76/100 Dias de Golang - Hot Reload com Air
Table of Contents
#
Hot Reload com Air
Ficar cancelando o go run main.go no terminal ou recompilando manualmente a cada alteração é bem cansativo. Para resolver isso, podemos usar o Air: uma ferramenta de hot reload que detecta mudanças nos arquivos e recompila automaticamente sua aplicação.
Vamos criar um projeto e instalar a dependência:
go install github.com/air-verse/air@latest
E no nosso main.go criar um endpoint bem simples:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Olá victorstein.dev")
})
fmt.Println("Olá victorstein.dev")
http.ListenAndServe(":8080", nil)
}
Depois rodamos somente um comando:
air
A saída será:
__ _ ___
/ /\ | | | |_)
/_/--\ |_| |_| \_ v1.61.7, built with Go go1.24.0
mkdir /home/victorstein/Cursos/golang-victor/go-air/tmp
watching .
!exclude tmp
building...
running...
Olá victorstein.dev
Temos como criar um arquivo de configuração air.toml
com o comando air init
. Esse arquivo criado será um padrão com várias flags definidas. Vou passa um aqui que eu encontrei para desenvolvimento:
root = "."
tmp_dir = "tmp"
[build]
cmd = "go build -ldflags='-s -w' -o ./tmp/app ./main.go"
bin = "tmp/app"
include_ext = ["go", "yaml", "yml", "json"]
exclude_dir = ["vendor", "tmp", "frontend", "docs"]
exclude_regex = [".*_test.go$"]
delay = 1000
[log]
time = true
[color]
main = "blue"
watcher = "yellow"
build = "green"
Podemos definir várias outras configs:
Variáveis de ambiente específicas para desenvolvimento:
[build]
cmd = "go build -o ./tmp/main ."
bin = "./tmp/main"
args_bin = ["-env=development", "-debug=true"]
Excluir diretórios:
exclude_dir = ["vendor", "node_modules", ".git"]
Também é possível executar testes, integrar com Docker, entre outras funcionalidades. Vale a pena conferir a documentação oficial do Air.