Se você se sente incomodado em ter que parar sua aplicação e fazer go run
novamente toda vez que faz uma alteração, esse post vai melhorar sua vida… e MUITO.
Nesse post vou te mostrar como fazer live reload de aplicações Go utilizando uma ferramenta open source chamada Air (https://github.com/cosmtrek/air).
Para testar as funcionalidades da ferramenta, vamos escrever um pequeno programa que retorna um “Olá mundo”.
Vamos inicializar um novo módulo com o comando go mod init github.com/aprendagolang/live-reload
e criar um arquivo main.go com o seguinte conteúdo.
package main
import (
"net/http"
"github.com/go-chi/chi/v5"
)
func main() {
r := chi.NewRouter()
r.Get("/", func(rw http.ResponseWriter, r *http.Request) {
rw.Write([]byte("Olá Mundo"))
})
http.ListenAndServe(":8080", r)
}
Como estamos utilizando uma dependência externa, vamos executar o go mod tidy
para atualizar nosso go.mod, que deve ficar parecido com isso:
module github.com/aprendagolang/live-reload
go 1.18
require github.com/go-chi/chi/v5 v5.0.7
Com nosso pequeno programa escrito, vamos instalar o Air.
Por ser escrito em Go, podemos fazer sua instalação utilizando o próprio install
do Go.
go install github.com/cosmtrek/[email protected]
Para testar se deu tudo certo com a instalação, execute um air -v
no seu terminal. Se a instação ocorreu sem problemas, você deverá ver o seguinte output:
Agora vamos criar um arquivo de configuração para o Air com o comando air init
. Esse comando irá criar um arquivo chamado .air.toml
com o seguinte conteúdo.
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"
[build]
args_bin = []
bin = "./tmp/main"
cmd = "go build -o ./tmp/main ."
delay = 1000
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
exclude_file = []
exclude_regex = ["_test.go"]
exclude_unchanged = false
follow_symlink = false
full_bin = ""
include_dir = []
include_ext = ["go", "tpl", "tmpl", "html"]
kill_delay = "0s"
log = "build-errors.log"
send_interrupt = false
stop_on_error = true
[color]
app = ""
build = "yellow"
main = "magenta"
runner = "green"
watcher = "cyan"
[log]
time = false
[misc]
clean_on_exit = false
[screen]
clear_on_rebuild = false
Uma pequena mudança que eu gosto de fazer é mudar o time para true. Porém se você não quiser, não precisa alterar nada nesse arquivo.
Agora tudo que precisamos fazer é executar o comando air
no terminal e nosso live reload já estará funcionando.
Para testar o live reload, vamos modificar o nosso r.Get("/", ...
para o seguinte:
r.Get("/{name}", func(rw http.ResponseWriter, r *http.Request) {
name := chi.URLParam(r, "name")
rw.Header().Add("Content-Type", "application/json")
json.NewEncoder(rw).Encode(map[string]string{
"message": fmt.Sprintf("Olá %s!!!", name),
})
})
Como podemos ver no terminal, a aplicação foi recompilada automaticamente.
É isso, espero que essa dica ajude a melhorar sua produtividade.
Deixem suas dúvidas nos comentários.
Até a próxima!
Subscreva
Fique por dentro de tudo o que acontece no mundo Go.