Featured image of post Como usar o hot reload em Go

Como usar o hot reload em Go

Quando comecei a desenvolver minha primeira API com Golang, senti falta de um recurso essencial: o hot reload. Sem isso, cada mudança no código exigia recompilar e reiniciar o servidor manualmente, o que rapidamente se tornou um processo cansativo.

Em busca de algo que resolvesse esse problema, mergulhei em pesquisas na internet e encontrei algumas soluções, como usar a biblioteca Air ou o Nodemon. Mas nenhuma das duas me deixou confortável. Eu não queria adicionar mais uma biblioteca no meu projeto (no caso do Air), e o Nodemon, por ser escrito em JavaScript e depender do NPM, também não era algo que me agradava. Afinal, eu queria algo mais alinhado com o ecossistema Go.

Foi aí que descobri o Task. O Task é uma ferramenta de automação desenvolvida em Go que, além de ser extremamente simples de usar, não exige nenhuma dependência extra no projeto. Isso significa que, por ser um binário instalado na sua máquina, você pode utilizá-lo sem adicionar nada ao seu código ou modificar sua estrutura. Para mim, foi a solução perfeita!

Instalando e configurando o Task

Primeiro, você precisa instalar o Task. As instruções estão na documentação oficial: https://taskfile.dev/installation/. Depois de instalado, é hora de configurar o taskfile.yml no seu projeto. Esse arquivo é onde você define as tarefas que o Task vai executar. Aqui está um exemplo básico para habilitar hot reload:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
version: '3'

tasks:
  :build:
    cmds:
      - 'go build -o dist/main ./main.go'
    sources:
      - ./*.go
      - ./**/*.go

  :start:
    cmds:
      - task: :build
      - './dist/main'
    sources: 
      - ./*.go
      - ./**/*.go

Como funciona o taskfile.yml

O arquivo taskfile.yml é bem simples de entender:

  • :build: Essa tarefa compila o código-fonte usando o comando go build e gera um binário (dist/main).
  • :start: Essa tarefa depende da :build. Primeiro, compila o código e, em seguida, executa o binário gerado.
  • Sources: Aqui, você define quais arquivos o Task deve monitorar para detectar mudanças. Sempre que um desses arquivos for alterado, o Task recompila e reinicia o servidor.

Depois de configurar o taskfile.yml, você pode rodar o comando:

1
go-task :start -w --interval=500ms

Isso ativa o monitoramento de alterações no código e mantém o servidor sempre atualizado com as mudanças.

Dica: Se o comando go-task não funcionar, tente só task.

Por que escolhi o Task?

O Task é uma ferramenta leve, prática e está completamente alinhada com o ecossistema Go. Por ser um binário independente, ele não adiciona dependências ao projeto e não exige configurações complicadas. Além disso, é uma solução flexível, que não se limita apenas ao hot reload, permitindo configurar várias outras automações no projeto. Depois de experimentar algumas opções, o Task se mostrou a solução ideal para mim. Ele resolve o problema de hot reload de forma simples e eficiente, sem depender de ferramentas externas ou adicionar bibliotecas ao projeto. Com a configuração certa, como mostrei acima, dá pra ter um fluxo de desenvolvimento bem mais prático e organizado.