Esta é uma coleção de aplicações desenvolvidas em Go, cada uma demonstrando diferentes conceitos, arquiteturas e padrões de design.
Introdução básica à linguagem Go, imprimindo "Hello World" na tela.
- Conceitos: Sintaxe básica de Go, pacotes, função main
- Docker:
docker-compose -f docker-compose-app01.yml up
Demonstração dos tipos de dados e variáveis em Go.
- Conceitos: Tipos de dados, declaração de variáveis, conversões
- Docker:
docker-compose -f docker-compose-app02.yml up
Implementação de estruturas de controle em Go.
- Conceitos: If/else, loops, switch, defer
- Docker:
docker-compose -f docker-compose-app03.yml up
Aplicação demonstrando uso de funções em Go.
- Conceitos: Declaração de funções, retornos múltiplos, funções anônimas
- Docker:
docker-compose -f docker-compose-app04.yml up
Demonstração de estruturas e interfaces em Go.
- Conceitos: Structs, métodos, interfaces, embedding
- Docker:
docker-compose -f docker-compose-app05.yml up
Aplicação demonstrando concorrência em Go.
- Conceitos: Goroutines, channels, select, WaitGroups
- Docker:
docker-compose -f docker-compose-app06.yml up
Implementação de uma API REST simples.
- Conceitos: HTTP handlers, rotas, JSON
- Docker:
docker-compose -f docker-compose-app07.yml up
Aplicação web com templates HTML.
- Conceitos: Templates, parsing, renderização
- Docker:
docker-compose -f docker-compose-app08.yml up
Aplicação com integração a banco de dados.
- Conceitos: SQL, CRUD, migrations
- Docker:
docker-compose -f docker-compose-app09.yml up
Implementação de padrões de design em Go.
- Conceitos: Singleton, Factory, Observer, etc.
- Docker:
docker-compose -f docker-compose-app10.yml up
Demonstra a implementação e uso de middlewares em Go para autenticação básica HTTP e logging de requisições.
- Conceitos: Middlewares, Autenticação Básica, Logging, Http Handlers
- Docker:
docker-compose -f docker-compose-app11.yml up
Sistema completo de gerenciamento de uploads de arquivos com interface web.
- Conceitos: Manipulação de arquivos, formulários multipart, templates HTML
- Docker:
docker-compose -f docker-compose-app12.yml up
Calculadora com API web que demonstra testes unitários e de integração.
- Conceitos: Testes unitários, testes de integração, table-driven tests, mocking
- Docker:
docker-compose -f docker-compose-app13.yml up
API RESTful para gerenciamento de tarefas usando boas práticas de desenvolvimento.
- Conceitos: Arquitetura limpa, CRUD, middleware, graceful shutdown
- Docker:
docker-compose -f docker-compose-app14.yml up
API completa para um blog usando arquitetura hexagonal (ports and adapters).
- Conceitos: Arquitetura hexagonal, SOLID, JWT, domínio rico
- Docker:
docker-compose -f docker-compose-app15.yml up
Cada aplicação pode ser executada individualmente usando Go diretamente ou via Docker Compose.
# Navegar até o diretório da aplicação
cd app01
# Executar a aplicação
go run main.go
# Executar uma aplicação específica
docker-compose -f docker-compose-app01.yml up
# Parar a aplicação
docker-compose -f docker-compose-app01.yml down
Um script Bash foi criado para facilitar a execução das aplicações:
# Dar permissão de execução ao script (Linux/Mac)
chmod +x run-all-apps.sh
# Executar o script
./run-all-apps.sh
O script oferece um menu interativo para escolher qual aplicação executar, incluindo a opção de executar todas as aplicações simultaneamente.
- Go 1.16+ (para execução local)
- Docker e Docker Compose (para execução via contêineres)
Cada aplicação está em seu próprio diretório e é independente das demais:
go-backend/
├── app01/ # Hello World
├── app02/ # Variáveis e Tipos
├── app03/ # Estruturas de Controle
├── app04/ # Funções
├── app05/ # Estruturas e Interfaces
├── app06/ # Concorrência
├── app07/ # APIs REST Básicas
├── app08/ # Templates HTML
├── app09/ # Banco de Dados
├── app10/ # Padrões de Design
├── app11/ # Middleware para Autenticação e Logging
├── app12/ # Upload de Arquivos
├── app13/ # Testes Automatizados
├── app14/ # API RESTful com Boas Práticas
└── app15/ # Blog API com Arquitetura Hexagonal
Sinta-se à vontade para contribuir com este repositório, seja melhorando as aplicações existentes ou adicionando novas.