Live reload em Go com docker e compile daemon

nathaliapavan

Nathalia Pavan

Posted on April 25, 2024

Live reload em Go com docker e compile daemon

Desenvolver aplicações em Go é bastante produtivo, principalmente quando conseguimos combinar ferramentas que automatizam tarefas chatas comuns de desenvolvimento. Neste artigo, vamos explorar como implementar o live reload em uma aplicação Go usando Docker e o pacote CompileDaemon.

Caso só tenha interesse no código, você pode encontrar o projeto no meu GitHub

O que é live reload?

O live reload é uma técnica que permite que as alterações no código sejam automaticamente refletidas na aplicação em execução, sem a necessidade de reiniciar manualmente o servidor. Isso é muito útil durante o desenvolvimento, pois podemos visualizar imediatamente o impacto das alterações realizadas no código.

O que é CompileDaemon?

O CompileDaemon automatiza a recompilação do código em projetos Go, eliminando a tediosa tarefa de reiniciar manualmente o servidor a cada modificação no código. Com ele, as alterações são instantaneamente refletidas na aplicação que está sendo executada, garantindo um processo de desenvolvimento mais dinâmico e eficiente. Ao combiná-lo com o Docker, criamos um ambiente de desenvolvimento onde as alterações são aplicadas sem interrupções, reduzindo o tédio e aumentando nossa produtividade.

Pré-requisitos

Antes de começarmos, certifique-se de ter as ferramentas abaixo instaladas em sua máquina:
Go
Docker
Docker-Compose

Configurando o Projeto

Vamos começar criando um novo projeto Go. Abra seu terminal e crie um diretório e navegue até ele:

mkdir go-live-reload-docker && cd go-live-reload-docker
Enter fullscreen mode Exit fullscreen mode

Execute o seguinte comando para inicializar o módulo do Go e criar o arquivo go.mod:

go mod init go-live-reload-docker
Enter fullscreen mode Exit fullscreen mode

Estrutura do Projeto

Crie os arquivos abaixo manualmente. A estrutura do projeto deve ser a seguinte:

go-live-reload-docker/
├── docker-compose.yml
├── Dockerfile.dev
├── go.mod
└── main.go
Enter fullscreen mode Exit fullscreen mode

docker-compose.yml

Para simplificar o processo de construção e execução da nossa aplicação, vamos utilizar o Docker Compose.

version: "3"

services:
  app:
    container_name: go-live-reload
    build:
      context: .
      dockerfile: ./Dockerfile.dev
    ports:
      - 8080:8080
    volumes:
      - ./:/app
Enter fullscreen mode Exit fullscreen mode

Este arquivo define um serviço chamado app que constrói a aplicação Go usando o arquivo Dockerfile.dev. Ele também mapeia a porta 8080 do contêiner para a porta 8080 do host, permitindo que a aplicação seja acessível localmente.

Dockerfile.dev

Este Dockerfile será usado apenas durante o desenvolvimento e incluirá o pacote CompileDaemon para habilitar o live reload. Aqui está o conteúdo do arquivo Dockerfile.dev:

FROM golang:latest

ENV PROJECT_DIR=/app \
    GO111MODULE=on \
    CGO_ENABLED=0

WORKDIR /app

RUN mkdir "/build"

COPY . .

RUN go get github.com/githubnemo/CompileDaemon

RUN go install github.com/githubnemo/CompileDaemon

ENTRYPOINT CompileDaemon -build="go build -o /build/app -buildvcs=false" -command="/build/app"
Enter fullscreen mode Exit fullscreen mode

Este Dockerfile utiliza a imagem oficial do Go como base e define algumas variáveis de ambiente necessárias. Ele também instala o CompileDaemon e configura um ponto de entrada para executar nossa aplicação com live reload.

main.go

Nosso arquivo main.go contém uma simples aplicação HTTP que responde com uma mensagem. Aqui está o conteúdo do arquivo:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, Nat!")
    })

    http.ListenAndServe(":8080", nil)
}
Enter fullscreen mode Exit fullscreen mode

Executando a Aplicação

Agora que tudo está configurado, podemos construir e executar a aplicação com Docker. Basta executar os comandos na raiz do projeto:

docker-compose build
docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

Isso construirá a imagem Docker e iniciará o contêiner em segundo plano. Você pode validar a aplicação em seu navegador acessando: http://localhost:8080 🥳

Conclusão

Neste artigo, exploramos como implementar o live reload em uma aplicação Go usando Docker e CompileDaemon. O live reload acelera o ciclo de desenvolvimento, permitindo que os desenvolvedores visualizem instantaneamente as alterações feitas no código. Com o Docker, a configuração do ambiente de desenvolvimento é simplificada e a distribuição da aplicação é facilitada. Espero que este guia tenha sido útil e que você possa aplicar esses conceitos em seus próprios projetos, será um ótimo start pra sair do zero.

Até mais o/

Fontes

https://github.com/githubnemo/CompileDaemon
https://thegodev.com/live-reloading/
https://blog.logrocket.com/using-air-go-implement-live-reload/
https://harrk.dev/live-reloading-a-go-application-with-docker/
https://stackoverflow.com/a/41429055
https://www.youtube.com/watch?v=EoclvPzeD14&ab_channel=Aregularguy

💖 💪 🙅 🚩
nathaliapavan
Nathalia Pavan

Posted on April 25, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related