🚀 Capítulo 20: A Era de Ultron P2 (Tema: Vingadores)
NOTE
Este é o capítulo final do curso de Backend com Golang e Gin! Parabéns por chegar até aqui. Agora vamos empacotar o seu projeto e deixá-lo pronto para o mundo!
1. 🎯 Objetivo da Aula
Consolidar todos os conhecimentos adquiridos sobre Go e Gin, entender como relacionar tabelas no banco de dados e aprender o conceito de Docker para colocar a sua API no ar.
2. 🏢 O Cenário Prático (Seu Desafio)
No final do filme Vingadores: Era de Ultron, após muitas batalhas e linhas de código corrigidas, a equipe de heróis consegue conter a ameaça do robô rebelde e salvar o mundo. O sistema foi finalmente estabilizado e pacificado. Tudo terminou bem porque a base era sólida!
Você chegou ao final da sua jornada neste curso de Backend!
- Na Parte , você criou as tabelas de Usuários e Produtos.
- Agora, na Parte , vamos entender como relacionar essas tabelas (Ex: Um Usuário pode fazer vários Pedidos) e como empacotar todo o seu sistema em um “contêiner” para que ele rode perfeitamente no computador de qualquer pessoa ou servidor na nuvem! Este é o seu teste final como desenvolvedor backend! Seu desafio é finalizar a Era de Ultron!
🧠 Fundamentos: A Teoria Traduzida
🔗 1. Relacionamento de Tabelas (GORM):
No mundo real, as informações se relacionam. Um usuário faz um pedido, e esse pedido tem vários produtos. O GORM facilita muito a criação dessas relações usando chaves estrangeiras (Foreign Keys) de forma automática apenas lendo as nossas Structs!
🐳 2. O que é Docker e por que o Go o ama?
Imagine que você construiu a sua API no seu computador Windows. Mas o servidor da empresa onde o site vai rodar usa Linux. É muito comum o código funcionar em um lugar e dar erro no outro!
- O Docker resolve isso! Ele cria um “contêiner” (uma caixa isolada) que guarda o seu código e tudo o que ele precisa para rodar. Se funcionou no contêiner do seu computador, vai funcionar em qualquer lugar do mundo!
- Go + Docker = Casamento Perfeito! Como o Go compila todo o código em um único arquivo binário pequeno, os contêineres Docker de Go costumam ter poucos Megabytes, sendo ultra rápidos de baixar e rodar na nuvem!
4. 📖 Exemplo Guiado: O Arquivo Dockerfile
Para colocar a sua API de Go dentro de um contêiner Docker, você só precisa criar um arquivo de texto chamado Dockerfile na raiz do projeto com estas linhas:
# 1. Usa a imagem oficial do Go para compilar
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o main .
# 2. Cria uma imagem super leve apenas com o arquivo pronto!
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/main .
CMD ["./main"]5. 🛠️ Prática Obrigatória: A Vantagem do Docker
Com base no texto:
- Por que o Docker é tão útil para evitar o clássico problema de “Na minha máquina funciona, mas no servidor dá erro”?
- Por que as APIs feitas em Go são perfeitas para serem usadas com contêineres Docker?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 20 Go_UltronP2) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
spec_backend_com_golang_e_gin/
├── capitulos/
│ └── capitulo_20_ultron_p2.md💡 Checkpoint de Lógica
Parabéns por concluir o curso de Backend com Golang e Gin! Você agora possui a base para construir APIs extremamente rápidas, seguras e modernas. Continue praticando, construindo projetos e estudando! O mundo do backend te espera!
10. 🔥 Desafio de Fixação
Pesquise o que significa o termo Monolito e qual a diferença dele para uma arquitetura de Microsserviços (onde o Go brilha!).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática Obrigatória:
- Porque o Docker cria um ambiente isolado e idêntico tanto no seu computador de desenvolvimento quanto no servidor de produção. O código roda dentro desse “contêiner” padronizado, garantindo que o comportamento seja exatamente o mesmo em qualquer sistema operacional!
- Porque o Go gera um arquivo executável único e binário que não precisa de um monte de arquivos de suporte para rodar. Isso permite criar imagens Docker minúsculas (muitas vezes menores que ), que iniciam instantaneamente e economizam muito dinheiro com servidores na nuvem!