DEV Community

Nathalia Pavan
Nathalia Pavan

Posted on

1

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

The Fastest, Most Accurate API for Voice AI

Ad Image

Power your Conversational AI with the most accurate real-time speech-to-text API. Available in 50 languages and at <1-second latency. Perfect for building seamless and emotionally intelligent voice experiences.

Start building today 🛠️

Top comments (0)

Sentry workshop image

Sick of your mobile apps crashing?

Let Simon Grimm show you how to fix them without the guesswork. Join the workshop and get to debugging.

Save your spot →

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay