Sumário do Curso
Backend com Go (Golang) 🐹
"Não comunique compartilhando memória; compartilhe memória comunicando." — Provérbio Go
🧭 Atalhos Rápidos
-
Aulas --- 16 aulas completas organizadas em 4 módulos práticos. Ver Trilha
-
Slides --- Slides interativos em Reveal.js para acompanhar cada aula. Acessar Slides
-
Quizzes --- Teste seus conhecimentos com quizzes interativos. Fazer Quizzes
-
Projetos --- Projetos práticos para construir seu portfólio. Ver Projetos
-
Exercícios --- Pratique com exercícios focados em código real. Praticar Agora
-
Setups --- Guias de instalação e configuração do ambiente Go. Configurar Ambiente
🗺️ Mapa da Jornada
O curso está estruturado para levar você do zero à construção de APIs performáticas em Go:
- Módulo 1 – Fundamentos de Go: Ecossistema Go, fundamentos da linguagem, funções e organização de código, estruturas de dados avançadas.
- Módulo 2 – Orientação a Composição e I/O: Interfaces, tratamento de erros, manipulação de arquivos e JSON, concorrência com Goroutines.
- Módulo 3 – Web e APIs: Programação web com
net/http, construção de APIs REST, framework Gin, banco de dados com GORM. - Módulo 4 – Produção: Testes em Go, arquitetura e boas práticas, Docker e deploy, e o projeto final (sistema de gerenciamento de biblioteca).
💡 Dicas de Sucesso
- Abrace a simplicidade: Go valoriza código explícito e legível — resista à tentação de criar abstrações desnecessárias.
go vetego fmtsão seus amigos: rode sempre antes de commitar, evitam bugs bobos e mantêm o código padronizado.- Concorrência não é paralelismo: entenda Goroutines e Channels a fundo antes de usá-los em produção.
Pronto para começar? Ir para Aula 01
Plano de Ensino 🧭
Curso: Desenvolvimento Backend com Go (Golang)
Público-alvo: Estudantes de ADS, Ciência da Computação e Desenvolvedores de Software
Carga Horária: 20 Aulas (80 Horas Teórico-Práticas)
🎯 1. Objetivos do Curso
- Compreender os fundamentos conceituais e arquiteturais de Desenvolvimento Backend com Go (Golang).
- Aplicar padrões de projeto, sintaxe moderna e boas práticas da indústria.
- Desenvolver soluções completas através de exercícios práticos e desafios de projeto.
📚 2. Cronograma de Aulas (Matriz de 20 Semanas)
| Aula | Tema Central | Atividades e Entregas |
|---|---|---|
| 01 | Introdução ao Go e Ecossistema | Teoria, Prática Guiada, Quiz e Exercícios |
| 02 | Fundamentos da Linguagem | Teoria, Prática Guiada, Quiz e Exercícios |
| 03 | Funções e Organização do Código | Teoria, Prática Guiada, Quiz e Exercícios |
| 04 | Estruturas de Dados Avançadas ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 05 | Interfaces e Programação Orientada a Composição | Teoria, Prática Guiada, Quiz e Exercícios |
| 06 | Tratamento de Erros ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 07 | Manipulação de Arquivos e JSON | Teoria, Prática Guiada, Quiz e Exercícios |
| 08 | Concorrência em Go | Teoria, Prática Guiada, Quiz e Exercícios |
| 09 | Programação Web com net/http | Teoria, Prática Guiada, Quiz e Exercícios |
| 10 | Construindo APIs REST ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 11 | Framework Web Gin | Teoria, Prática Guiada, Quiz e Exercícios |
| 12 | Banco de Dados (GORM) | Teoria, Prática Guiada, Quiz e Exercícios |
| 13 | Testes em Go | Teoria, Prática Guiada, Quiz e Exercícios |
| 14 | Arquitetura e Boas Práticas ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 15 | Docker e Deploy | Teoria, Prática Guiada, Quiz e Exercícios |
| 16 | Projeto Final: Sistema de Gerenciamento de Biblioteca | Teoria, Prática Guiada, Quiz e Exercícios |
| 17 | Concorrência Extrema com Goroutines e Channels | Teoria, Prática Guiada, Quiz e Exercícios |
| 18 | Construção de APIs REST com Gin e GORM | Teoria, Prática Guiada, Quiz e Exercícios |
| 19 | Testes de Benchmark e Perfilamento de Memória (pprof) | Teoria, Prática Guiada, Quiz e Exercícios |
| 20 | Projeto Capstone: Microsserviço Golang de Baixíssima Latência | Teoria, Prática Guiada, Quiz e Exercícios |
🧠 3. Metodologia de Ensino
- Teoria Fundamentada: Aulas com conceitos detalhados, diagramas arquiteturais e sintaxe de referência.
- Ciclo Teoria ⇄ Prática: Cada aula conta com Quiz Interativo (10 questões) para validação imediata, Lista de Exercícios Sanfonados (com Gabarito Explicado) e Desafio de Projeto Prático.
- Laboratório Contínuo: Ambientes configurados passo a passo na seção de Setups da plataforma.
💼 4. Competências e Perfil Desenvolvido
- Dominar as ferramentas e fluxos de desenvolvimento de Desenvolvimento Backend com Go (Golang).
- Resolver problemas técnicos de alta complexidade com código limpo e performático.
- Construir portfólio prático com 20 projetos aplicados.
📊 5. Critérios de Avaliação
- 20 Listas de Exercícios: Resolução individual dividida em Básico, Intermediário e Desafio.
- 20 Quizzes Interativos: Validação formativa com feedback imediato via JavaScript.
- 20 Desafios de Projetos: Aplicações práticas consolidando o aprendizado de cada unidade.
Aulas
Aula 01 - Introdução ao Go e Ecossistema 🐹
Objetivo
Objetivo: Compreender a origem, a filosofia e os diferenciais da linguagem Go, além de configurar o ambiente de desenvolvimento e executar o primeiro programa.
1. O que é Go? 🚀
Desenvolvida pelo Google em 2007 (e lançada em 2009), Go (ou Golang) foi criada para resolver desafios reais de engenharia de software em larga escala. Seus criadores — Robert Griesemer, Rob Pike e Ken Thompson — buscaram uma linguagem que fosse eficiente como C++, mas simples de ler e escrever como Python.
🏛️ Os Pilares da Linguagem
Go não tenta ser a linguagem com mais recursos, mas sim a mais produtiva para sistemas modernos:
- Simplicidade: A especificação da linguagem é pequena e fácil de aprender.
- Eficiência: Compilada diretamente para código de máquina (sem máquinas virtuais).
- Concorrência Nativa: Goroutines e Channels tornam o processamento paralelo simples e leve.
- Segurança: Tipagem forte e estática, com gerenciamento automático de memória (Garbage Collector).
2. Por que escolher Go? ⚖️
| Característica | 🐹 Go | 🐍 Python | ☕ Java |
|---|---|---|---|
| Velocidade | Ultra-rápida (Compilada) | Lenta (Interpretada) | Média (JIT) |
| Binário | Único e estático | Precisa de interpretador | Precisa de JVM |
| Concorrência | Nativa e leve | GIL (limitado) | Threads pesadas |
| Curva de Aprendizado | Rápida | Muito rápida | Média |
Onde o Go brilha? (Mermaid)
mindmap
root((Ecossistema Go))
Cloud e Infraestrutura
Docker
Kubernetes
Terraform
Backend de Alta Performance
APIs RESTfuk
gRPC
Microsserviços
CLI Tools
Hugo
Github CLI
Data Processing
Pipeline de Dados
Streaming
3. Instalação e Setup 🛠️
Para começar a programar em Go, siga estes passos:
- Download: Acesse go.dev/dl e baixe a versão para seu SO.
- Verificação: Abra o terminal e verifique se o Go foi instalado corretamente.
- Editor: Recomendamos o Visual Studio Code com a extensão oficial Go (da Google).
4. Estrutura de um Programa Go 📂
Todo arquivo Go deve seguir uma estrutura básica:
package main // 1. Declaração do pacote
import "fmt" // 2. Importação de dependências
// 3. Função principal (ponto de entrada)
func main() {
fmt.Println("Olá, Gophers! 🐹")
}
- package main: Indica que este arquivo é um executável, não uma biblioteca.
- func main(): É o primeiro código a ser rodado quando o binário inicia.
5. Seu Primeiro Programa: "Hello, World" 🚀
Vamos criar e rodar seu primeiro código:
# Crie um diretório para seus estudos
$ mkdir estudos-go
$ cd estudos-go
# Inicialize um módulo (gerenciador de dependências)
$ go mod init meu-projeto
# Crie o arquivo principal
$ touch main.go
# (Edite o arquivo com o código acima)
# Execute diretamente sem compilar
$ go run main.go
Olá, Gophers! 🐹
# Ou compile para um binário executável
$ go build main.go
$ ./main # Ou main.exe no Windows
6. Mini-Projeto: Dashboard do Sistema 📊
Como desafio inicial, crie um programa chamado perfil.go que imprima no console:
1. Seu nome.
2. Sua idade.
3. Uma frase sobre por que você quer aprender Go.
Dica: Use
fmt.Println()para cada linha.
7. Exercícios de Fixação 🧠
- Quem são os criadores originais da linguagem Go?
- Qual a principal diferença entre
go runego build? - Para que serve o comando
go mod init?
Próxima Aula: Vamos mergulhar nos Fundamentos da Linguagem, explorando variáveis e tipos! 🧱
Aula 02 - Fundamentos da Linguagem 🧱
Objetivo
Objetivo: Dominar os blocos de construção essenciais do Go: tipos de dados, variáveis, operadores e as estruturas de controle de fluxo.
1. Variáveis e Constantes 📦
Em Go, existem diversas formas de declarar variáveis, mas a linguagem preza pela clareza e tipagem forte.
Declaração Explícita vs Curta
// Forma longa (com tipo)
var nome string = "Gopher"
// Forma curta (inferência de tipo - apenas dentro de funções)
idade := 25
// Constantes (valores que não mudam)
const Pi = 3.1415
2. Tipos Primitivos 💎
Go possui tipos bem definidos para garantir eficiência de memória:
- Inteiros:
int,int8,int64,uint(sem sinal). - Decimais:
float32,float64. - Booleanos:
bool(true,false). - Textos:
string(UTF-8 por padrão!).
Important
Go não faz conversão implícita de tipos. Você não pode somar um int com um float64 sem converter um deles manualmente.
3. Estruturas Condicionais 🚦
O controle de fluxo em Go é simples e direto.
If / Else
Note que não usamos parênteses nos testes condicionais!
Switch
O switch em Go é poderoso e não precisa de break em cada caso (ele para automaticamente).
switch dia {
case "Sábado", "Domingo":
fmt.Println("Fim de semana! 🎉")
default:
fmt.Println("Dia de codar! 💻")
}
4. Estruturas de Repetição 🔁
Aqui está uma curiosidade: Go só tem uma palavra-chave para loops: for. Mas ele assume várias formas.
For Tradicional
For como "While"
5. Visualização de Fluxo (Mermaid) 📊
graph TD
Start([Início]) --> Input[Recebe Idade]
Input --> Cond{Idade >= 18?}
Cond -- Sim --> Adult[Pode entrar]
Cond -- Não --> Minor[Acesso negado]
Adult --> End([Fim])
Minor --> End
6. Mini-Projeto: Calculadora de IMC 🚀
Crie um programa imc.go que:
1. Declare variáveis para peso (float64) e altura (float64).
2. Calcule o IMC (peso / (altura * altura)).
3. Use um if/else ou switch para classificar:
* IMC < 18.5: Abaixo do peso.
* 18.5 a 24.9: Peso normal.
* >= 25: Acima do peso.
7. Exercícios de Fixação 🧠
- Qual a diferença entre usar
var x = 10ex := 10? - O que acontece se você declarar uma variável em Go e não usá-la? (Dica: tente compilar!)
- Como criar um loop infinito em Go?
Próxima Aula: Vamos aprender a organizar nosso código com Funções e Módulos! 🧩🧱🚀
Aula 03 - Funções e Organização do Código 🧩
Objetivo
Objetivo: Aprender a estruturar projetos em Go usando funções, pacotes e entender o conceito fundamental de ponteiros.
1. Funções em Go ⚙️
As funções são cidadãs de primeira classe em Go. Elas podem ser passadas como argumentos, retornadas por outras funções e muito mais.
Sintaxe Básica e Múltiplos Retornos
Diferente de C ou Java, Go permite retornar mais de um valor, o que é muito usado para tratamento de erros.
func dividir(a, b float64) (float64, error) {
if b == 0 {
return 0, fmt.Errorf("divisão por zero")
}
return a / b, nil
}
Funções Variádicas
Funções que aceitam um número variável de argumentos (como o próprio fmt.Println).
func somarTudo(numeros ...int) int {
total := 0
for _, n := range numeros {
total += n
}
return total
}
2. Ponteiros: Onde mora o dado? 📍
Ponteiros permitem acessar o endereço de memória de uma variável. Em Go, usamos ponteiros principalmente para performance (evitar cópia de dados grandes) ou para modificar um valor dentro de uma função.
&: Operador "endereço de" (onde está?).*: Operador "valor no endereço" (o que tem lá?).
3. Organização Profissional: Pacotes e Módulos 📂
Go organiza o código em Pacotes (Pastas).
- Exportação: Em Go, se uma função ou variável começa com Letra Maiúscula, ela é pública (exportada). Se começa com minúscula, é privada.
- Módulos: Definidos pelo arquivo
go.mod, gerenciam as dependências do projeto.
4. Visualização de Estrutura de Projeto (Termynal) 📂
$ tree
.
├── go.mod # Definição do módulo
├── main.go # Ponto de entrada
├── calculadora/ # Pacote personalizado
│ └── aritmetica.go # Funções (ex: somar, subtrair)
└── utils/ # Outro pacote
└── logger.go
5. Fluxo de Execução (Mermaid) 📊
graph LR
Main[main.go] -->|Importa| Calc[calculadora.Calculo]
Calc -->|Retorna| Result[Resultado]
Result -->|Exibe| Console[Tela do Usuário]
6. Mini-Projeto: Conversor de Medidas Modular 🚀
Crie um projeto com a seguinte estrutura:
1. Um pacote conversor com funções exportadas: CelsiusParaFahrenheit e KmParaMilhas.
2. Um arquivo main.go que importa o pacote conversor e exibe os resultados na tela.
7. Exercícios de Fixação 🧠
- Como você ignora um dos retornos de uma função em Go?
- Qual a diferença entre passar um parâmetro por valor e por ponteiro?
- O que define se uma função de um pacote pode ser acessada por outro pacote?
Próxima Aula: Vamos explorar as Estruturas de Dados Avançadas: Slices, Maps e Structs! 🗄️
Aula 04 - Estruturas de Dados Avançadas 🗄️
Objetivo
Objetivo: Entender como Go gerencia conjuntos de dados usando Arrays, Slices e Maps, além de criar tipos personalizados com Structs.
1. Arrays vs Slices 🍕
Embora parecidos, eles funcionam de forma muito diferente em Go.
Arrays (Tamanho Fixo)
Raramente usados diretamente em Go, pois seu tamanho faz parte do tipo.
Slices (Tamanho Dinâmico)
O "queridinho" do Go. É uma abstração poderosa sobre o Array.
// Criando um slice vazio
frutas := []string{"Maçã", "Banana"}
// Adicionando elementos
frutas = append(frutas, "Uva")
// Fatiando (Slicing)
subFrutas := frutas[0:2] // Pega do índice 0 até o 1
2. Maps: Chave e Valor 🗝️
Maps são coleções desordenadas de pares chave-valor (semelhante a Dicionários no Python ou Objetos no JS).
// Declarando um map
estoque := make(map[string]int)
// Adicionando dados
estoque["teclado"] = 50
estoque["mouse"] = 30
// Verificando se uma chave existe
valor, existe := estoque["monitor"]
3. Structs: Criando seus Próprios Tipos 🏗️
As Structs são a forma de Go agrupar diferentes tipos de dados em uma única entidade (como um "objeto" sem classes).
type Usuario struct {
ID int
Nome string
Ativo bool
}
// Inicializando
user := Usuario{ID: 1, Nome: "Ricardo", Ativo: true}
Métodos Associados
Você pode "anexar" funções a uma struct, transformando-as em métodos.
4. Visualização de Memória (Mermaid) 📊
graph LR
subgraph "Slice Header"
Ptr[Ponteiro]
Len[Tamanho]
Cap[Capacidade]
end
subgraph "Array Subjacente"
D1[Dado 1]
D2[Dado 2]
D3[Dado 3]
D4[Em branco]
end
Ptr --> D1
5. Exemplo de Manipulação (Termynal) 💻
$ go run main.go
Lista original: [A B C]
Após append: [A B C D]
Mapa de Preços: map[cafe:5.5 pão:1.2]
6. Mini-Projeto: Sistema de Gerenciamento de Alunos 🚀
Crie um programa escola.go que:
1. Defina uma struct Aluno com Nome e Notas (um slice de float64).
2. Crie uma função que receba um Aluno e calcule a média das notas.
3. No main, crie um map onde a chave é o CPF (string) e o valor é a struct Aluno.
4. Imprima a lista de alunos e suas respectivas médias.
7. Exercícios de Fixação 🧠
- O que acontece com a capacidade de um Slice quando ele atinge o limite e você faz um
append? - Como você remove um elemento de um Map?
- Posso ter uma Struct dentro de outra Struct? (Composição)
Próxima Aula: Vamos entender Interfaces e Programação Orientada a Composição, o segredo da flexibilidade do Go! 🧩🐹
Aula 05 - Interfaces e Programação Orientada a Composição 🧩
Objetivo
Objetivo: Compreender o conceito de Interfaces em Go, como elas permitem o polimorfismo e por que a composição é preferível à herança tradicional.
1. O que são Interfaces? 🔌
Em Go, uma Interface define um conjunto de métodos, mas não os implementa. Ela funciona como um "contrato". Se um tipo (geralmente uma struct) possui todos os métodos definidos na interface, dizemos que ele implementa essa interface.
Exemplo: A Interface Som
type Animal interface {
FazerSom() string
}
type Cachorro struct{}
func (c Cachorro) FazerSom() string { return "Au Au!" }
type Gato struct{}
func (g Gato) FazerSom() string { return "Miau!" }
Note que não usamos a palavra implements. Go faz isso de forma implícita (Duck Typing)!
2. Polimorfismo na Prática 🎭
Graças às interfaces, podemos criar funções que aceitam qualquer tipo que se "comporte" de uma certa maneira.
3. Composição: O "Jeito Go" de Reutilizar Código 🏗️
Go não possui herança de classes. Em vez disso, usamos a Composição (Embedding).
type Motor struct {
Potencia int
}
type Carro struct {
Motor // O carro "tem um" motor (embedding)
Marca string
}
Isso torna o sistema muito mais flexível e evita as armadilhas de hierarquias complexas de classes.
4. Princípios SOLID em Go 🛡️
- S (Single Responsibility): Structs focadas.
- O (Open/Closed): Aberto para extensão via interfaces.
- L (Liskov Substitution): Interfaces garantem que o substituto funcione.
- I (Interface Segregation): Interfaces pequenas são melhores (ex:
io.Reader). - D (Dependency Inversion): Dependa de abstrações (interfaces), não de implementações.
Tip
"Quanto maior a interface, mais fraca a abstração." — Rob Pike.
5. Visualização de Composição (Mermaid) 📊
classDiagram
class Motor {
+int Potencia
+Ligar()
}
class Carro {
+Motor motor
+string Marca
}
class Moto {
+Motor motor
+bool TemCarenagem
}
Carro *-- Motor
Moto *-- Motor
6. Mini-Projeto: Sistema de Pagamentos Diversos 🚀
Crie uma interface MetodoPagamento com o método Pagar(valor float64).
1. Implemente a struct Cartao e a struct Boleto.
2. Crie uma função ProcessarCompra que receba a interface e realize o pagamento.
7. Exercícios de Fixação 🧠
- Preciso declarar explicitamente que uma Struct implementa uma Interface em Go?
- O que é uma "Interface Vazia" (
interface{}) e quando ela deve ser evitada? - Qual a vantagem da Composição sobre a Herança?
Próxima Aula: Vamos aprender a lidar com o inevitável: o Tratamento de Erros em Go! ⚠️🐹
Aula 06 - Tratamento de Erros ⚠️
Objetivo
Objetivo: Entender a filosofia de tratamento de erros em Go, a importância do tipo error, além de saber quando usar Panic e Recover.
1. Erros não são Exceções! 🧊
Em Go, erros são valores. Não existe try/catch. Se uma função pode falhar, ela retorna um valor do tipo error como seu último retorno.
O Padrão if err != nil
Esta é a frase mais famosa do Go. Quase todo código Go profissional verifica erros dessa forma:
arquivo, err := os.Open("dados.txt")
if err != nil {
fmt.Println("Erro ao abrir arquivo:", err)
return
}
// Se chegou aqui, o arquivo foi aberto com sucesso
defer arquivo.Close()
2. Criando Erros Customizados 🛠️
Você pode criar seus próprios erros usando o pacote errors ou formatando strings com fmt.Errorf.
var ErroSaldoInsuficiente = errors.New("saldo insuficiente para a operação")
func Sacar(valor float64) error {
if valor > saldo {
return ErroSaldoInsuficiente
}
return nil
}
3. Panic e Recover 🚨
O panic deve ser usado apenas para erros irrecuperáveis (fatais). O recover permite capturar um panic e evitar que o programa caia.
- Panic: Para o fluxo normal, executa os
defere encerra o programa. - Recover: Retoma o controle dentro de uma função que sofreu um panic.
func protegida() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recuperado de um desastre:", r)
}
}()
panic("ALGO DEU MUITO ERRADO!")
}
4. Diferenciando Erros de Panics (Mermaid) 📊
graph TD
Op[Operação] --> Res{Sucesso?}
Res -- Sim --> OK[Retorna Dado, nil]
Res -- Não --> Type{Severidade?}
Type -- Comum --> Err[Retorna nil, error]
Type -- Fatal --> Pnc[Envia Panic]
Err --> Handle[Tratamento via IF]
Pnc --> Rec{Tem Recover?}
Rec -- Sim --> OK
Rec -- Não --> Crash[Programa Encerra]
5. Boas Práticas de Erro 💡
- Não ignore erros: Nunca use
_para descartar o retorno de um erro. - Contexto é tudo: Adicione contexto ao erro antes de retornar:
fmt.Errorf("erro no banco: %v", err). - Defer: Use
deferpara garantir que recursos (arquivos, conexões) sejam fechados, mesmo que ocorra um erro.
6. Mini-Projeto: Sistema de Validação de Senha 🚀
Crie uma função ValidarSenha(senha string) error que retorne:
* Um erro se a senha tiver menos de 8 caracteres.
* Um erro se a senha não contiver ao menos um número.
* nil se estiver tudo certo.
No main, peça a senha ao usuário e trate os possíveis erros.
7. Exercícios de Fixação 🧠
- Por que Go não usa
try/catch? - Para que serve a palavra-chave
defer? - Qual a diferença entre
errors.Newefmt.Errorf?
Próxima Aula: Vamos aprender a persistir dados com Manipulação de Arquivos e JSON! 📁🐹
Aula 07 - Manipulação de Arquivos e JSON 📁
Objetivo
Objetivo: Aprender a ler e escrever arquivos no disco e a trabalhar com serialização/desserialização de dados no formato JSON.
1. Lendo e Escrevendo Arquivos ✍️
O pacote os e o io/ioutil (ou os diretamente em versões mais novas) são as ferramentas para lidar com o sistema de arquivos.
Escrita Simples
Leitura Simples
2. Trabalhando com JSON 🏗️
O JSON é o padrão de comunicação para APIs modernas. Em Go, usamos Struct Tags para mapear os campos da struct para os nomes das chaves no JSON.
Serialização (Struct -> JSON)
Desserialização (JSON -> Struct)
3. Fluxo de Dados (Mermaid) 📊
graph LR
User[Usuário/API] -->|JSON| App[App Go]
App -->|Struct| Logic[Lógica de Negócio]
Logic -->|Struct| App
App -->|JSON| File[(Arquivo .json)]
File --> App
4. Manipulação via Terminal (Termynal) 💻
$ cat config.json
{
"versao": "1.0",
"porta": 8080
}
$ go run main.go
Lendo configurações...
Servidor rodando na porta 8080
5. Encoder e Decoder 🚀
Para lidar com grandes fluxos de dados ou arquivos JSON diretamente, usamos json.NewEncoder e json.NewDecoder. Isso é mais eficiente que carregar tudo na memória com Marshal.
6. Mini-Projeto: CLI To-Do List 🚀
Crie um programa que permita:
1. Adicionar tarefas a uma lista (struct Tarefa).
2. Salvar essa lista em um arquivo chamado tarefas.json sempre que uma tarefa for adicionada.
3. Carregar as tarefas existentes ao iniciar o programa.
7. Exercícios de Fixação 🧠
- Para que servem as "Struct Tags" (ex:
json:"nome")? - Qual a diferença entre
json.Marshalejson.NewEncoder? - O que acontece se um campo da struct não tiver uma tag JSON?
Próxima Aula: Prepare-se para o poder das Goroutines e Channels! ⚡🐹
Aula 08 - Concorrência em Go ⚡
Objetivo
Objetivo: Entender o modelo de concorrência do Go baseado em Goroutines e Channels, aprendendo a criar programas que executam múltiplas tarefas simultaneamente.
1. Concorrência vs Paralelismo 🧩
- Concorrência: Lidar com muitas coisas ao mesmo tempo (composição de tarefas independentes).
- Paralelismo: Fazer muitas coisas ao mesmo tempo (execução simultânea em múltiplos núcleos).
Go foi desenhada para tornar a concorrência fácil e barata.
2. Goroutines: Threads Levíssimas 🪶
Uma Goroutine é uma função que executa de forma independente. Para iniciar uma, basta usar a palavra-chave go.
func dizer(s string) {
fmt.Println(s)
}
func main() {
go dizer("Olá") // Inicia em segundo plano
fmt.Println("Mundo")
}
Uma Goroutine consome apenas 2KB de memória inicial, permitindo rodar milhões delas em uma máquina comum!
3. Channels: A Comunicação Segura 📡
"Não comunique compartilhando memória; compartilhe memória comunicando."
Channels são os tubos que permitem às Goroutines trocarem dados de forma segura, sem precisar de travas (locks) complexas.
canal := make(chan string)
go func() {
canal <- "Dados enviados!" // Envia
}()
msg := <-canal // Recebe (bloqueia até chegar algo)
4. O Select: Um Switch para Canais 🚦
O select permite que uma Goroutine espere por múltiplas operações de comunicação.
select {
case msg1 := <-c1:
fmt.Println("Recebi de c1:", msg1)
case msg2 := <-c2:
fmt.Println("Recebi de c2:", msg2)
case <-time.After(time.Second):
fmt.Println("Timeout! ⏰")
}
5. Visualização de Canais (Mermaid) 📊
graph LR
subgraph "Goroutine 1"
G1[Processo A]
end
subgraph "Canal"
CH((Channel))
end
subgraph "Goroutine 2"
G2[Processo B]
end
G1 -->|Envia dado| CH
CH -->|Recebe dado| G2
6. Mini-Projeto: Web Crawler Básico 🚀
Crie um programa que receba um slice de 5 URLs e:
1. Dispare uma Goroutine para cada URL.
2. Cada Goroutine deve imprimir o tempo que levou para "acessar" aquela URL (use time.Sleep para simular).
3. Use um canal ou WaitGroup para garantir que o main espere todas terminarem.
7. Exercícios de Fixação 🧠
- O que acontece se você enviar um dado para um canal e ninguém estiver lendo? (Deadlock!)
- Qual a diferença de memória entre uma Thread comum (OS) e uma Goroutine?
- Para que serve um "Buffered Channel"?
Próxima Aula: Iniciaremos o Módulo 3 com Programação Web e net/http! 🌐🐹
Aula 09 - Programação Web com net/http 🌐
Objetivo
Objetivo: Aprender a criar servidores HTTP nativos em Go usando o pacote net/http, entender como funcionam os Handlers e como gerenciar rotas simples.
1. O Pacote net/http 📡
Go possui um servidor web de nível de produção embutido em sua biblioteca padrão. Diferente de outras linguagens que precisam de servidores externos (como Apache ou Nginx) para rodar a lógica, em Go o seu binário é o servidor.
Criando um Servidor "Hello Web"
package main
import (
"fmt"
"net/http"
)
func olaHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Olá, você acessou: %s", r.URL.Path)
}
func main() {
http.HandleFunc("/", olaHandler) // Roteamento
fmt.Println("Servidor rodando na porta 8080...")
http.ListenAndServe(":8080", nil) // Inicia o servidor
}
2. Entendendo Handlers e Requests 🏗️
- http.ResponseWriter (
w): É por onde você envia a resposta para o cliente (Status Code, Headers, Body). - http.Request (
r): Contém todas as informações da requisição vinda do cliente (Método, URL, Query Params, Body).
3. Servindo Arquivos Estáticos 📁
Go facilita muito o serviço de arquivos (HTML, CSS, Imagens).
fs := http.FileServer(http.Dir("./static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
4. Middleware: O Interceptador 🛡️
Middlewares são funções que executam antes (ou depois) do seu handler principal. Úteis para logs, autenticação e métricas.
func LogMiddleware(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
fmt.Printf("Requisição: %s %s\n", r.Method, r.URL.Path)
next(w, r)
}
}
5. Ciclo de Vida da Requisição (Mermaid) 📊
sequenceDiagram
participant Browser as Cliente (Browser)
participant Srv as Servidor Go
participant Mid as Middleware (Log)
participant Hnd as Handler (Home)
Browser->>Srv: GET /
Srv->>Mid: Intercepta
Mid->>Hnd: Executa lógica
Hnd-->>Mid: Retorna HTML/JSON
Mid-->>Browser: Envia Resposta 200 OK
6. Mini-Projeto: Contador de Visitas Web 🚀
Crie um servidor web que:
1. Tenha uma variável global contador.
2. Toda vez que a rota / for acessada, o contador incrementa.
3. A resposta deve ser: "Você é o visitante número X".
7. Exercícios de Fixação 🧠
- Qual a função do
http.ListenAndServe? - Como você lê um parâmetro de busca (query param) em uma requisição?
- O que acontece se você tentar rodar o servidor em uma porta que já está sendo usada?
Próxima Aula: Vamos profissionalizar nossa comunicação com APIs RESTful e Camadas! 🏗️🐹
Aula 10 - Construindo APIs REST 🏗️
Objetivo
Objetivo: Aplicar os conceitos de REST em Go, organizar o projeto em camadas (MVC adaptado) e entender o roteamento de recursos.
1. Organização em Camadas 🏛️
Para projetos reais, colocar tudo no main.go é inviável. Seguimos uma separação de responsabilidades:
- Handlers (Controller): Lida com a entrada HTTP e resposta.
- Services (Business Logic): Onde as regras de negócio vivem.
- Models (Data Objects): Define a estrutura dos dados.
- Repository (Data Access): Lida com o banco de dados.
2. Modelando nossa API de Produtos 📦
Vamos criar uma API para um catálogo:
type Produto struct {
ID int `json:"id"`
Nome string `json:"nome"`
Preco float64 `json:"preco"`
}
var produtos []Produto // Simulação de banco de dados
3. Implementando os Verbos HTTP 🎬
Listar (GET)
Criar (POST)
func CriarProduto(w http.ResponseWriter, r *http.Request) {
var p Produto
json.NewDecoder(r.Body).Decode(&p)
produtos = append(produtos, p)
w.WriteHeader(http.StatusCreated)
}
4. Estrutura de Pastas Profissional 📂
$ tree
.
├── main.go
├── handlers/
│ └── product_handler.go
├── services/
│ └── product_service.go
├── models/
│ └── product.go
└── go.mod
5. Hierarquia de Chamadas (Mermaid) 📊
graph TD
User((Usuário)) -->|JSON| Handler[Handler/Controller]
Handler -->|Valida| Service[Service/Business]
Service -->|Salva| Repo[Repository/DB]
Repo -->|Retorna| Service
Service -->|Retorna| Handler
Handler -->|Status 201| User
6. Mini-Projeto: API de Livros 🚀
Crie uma API básica que utilize net/http para:
1. Listar livros.
2. Adicionar um novo livro via POST.
3. Organize o código em ao menos dois pacotes diferentes (ex: main e models).
7. Exercícios de Fixação 🧠
- Por que a separação por camadas é importante para testes automatizados?
- Como você retornaria um erro
404se um produto não fosse encontrado? - Qual a diferença entre
json.NewDecoderejson.Unmarshalno contexto de uma requisição HTTP?
Próxima Aula: Vamos acelerar o desenvolvimento com o Framework Gin! 🚀🐹
Aula 11 - Framework Web Gin 🚀
Objetivo
Objetivo: Conhecer o framework Gin, suas vantagens sobre a biblioteca padrão, como gerenciar rotas complexas, parâmetros de URL e validação de dados.
1. Por que usar um Framework? 🤔
Embora o net/http seja excelente, ele é muito básico. Frameworks como o Gin fornecem funcionalidades prontas que economizam centenas de linhas de código:
- Velocidade: Gin é um dos frameworks mais rápidos do ecossistema Go.
- Roteamento Avançado: Suporte a parâmetros na URL (ex:
/user/:id) e grupos de rotas. - Middlewares: Sistema de plugin simples e poderoso.
- Binding e Validação: Converte JSON automaticamente para structs e valida os dados.
2. Primeiro Servidor com Gin 🍸
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default() // Cria uma instância com Logger e Recovery
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // Inicia na porta 8080 por padrão
}
3. Parâmetros e Query String 📍
Gin torna a captura de dados externa muito simples através do gin.Context.
// Parâmetro de URL: /usuario/ricardo
r.GET("/usuario/:nome", func(c *gin.Context) {
nome := c.Param("nome")
c.String(200, "Olá, %s", nome)
})
// Query String: /busca?q=golang
r.GET("/busca", func(c *gin.Context) {
query := c.Query("q")
c.JSON(200, gin.H{"resultado": query})
})
4. Binding e Validação de JSON 🏗️
Você pode usar tags binding:"required" para validar se um campo foi enviado.
type Login struct {
User string `json:"user" binding:"required"`
Password string `json:"password" binding:"required"`
}
r.POST("/login", func(c *gin.Context) {
var json Login
if err := c.ShouldBindJSON(&json); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"status": "logado"})
})
5. Comparação de Performance (Mermaid) 📊
graph LR
NetHttp[net/http] --- Fast((Rápido))
Gin[Framework Gin] --- UltraFast((Ultra Rápido))
Echo[Framework Echo] --- Fast((Rápido))
style Gin fill:#00add8,stroke:#333,stroke-width:2px
6. Mini-Projeto: API de Clientes com Gin 🚀
Utilizando o Gin, crie uma rota POST /clientes que:
1. Receba um JSON com nome, email e idade.
2. Valide se todos os campos estão presentes.
3. Retorne o cliente criado com um ID gerado automaticamente.
7. Exercícios de Fixação 🧠
- Qual a principal diferença entre
r.GETer.POSTno Gin? - Para que serve o objeto
gin.H? - Como você agruparia todas as rotas de uma "v1" da sua API?
Próxima Aula: Vamos conectar tudo isso a um Banco de Dados SQL com GORM! 💾🐹
Aula 12 - Banco de Dados (GORM) 💾
Objetivo
Objetivo: Aprender a conectar sua aplicação Go a um banco de dados relacional (PostgreSQL/SQLite) e realizar operações de CRUD usando o ORM GORM.
1. SQL Nativo vs ORM ⚖️
- database/sql: A interface padrão do Go para SQL. Você escreve as queries manualmente. Mais controle, mais código.
- GORM: O ORM (Object-Relational Mapping) mais popular para Go. Ele converte suas structs diretamente em tabelas e vice-versa. Menos código, mais produtividade.
2. Configurando o GORM e SQLite 🛠️
Para nossos testes, usaremos o SQLite (um banco de dados em arquivo), mas o código é quase idêntico para PostgreSQL.
type Produto struct {
gorm.Model // Adiciona ID, CreatedAt, UpdatedAt, DeletedAt
Nome string
Preco float64
}
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
// Criar a tabela automaticamente (Migration)
db.AutoMigrate(&Produto{})
3. Operações de CRUD 📝
Create (Criar)
Read (Ler)
Update (Atualizar)
Delete (Remover)
4. Integração: API + Banco de Dados (Mermaid) 📊
graph TD
API[Gin API] -->|Struct| GORM[GORM ORM]
GORM -->|SQL| DB[(PostgreSQL/SQLite)]
DB -->|Rows| GORM
GORM -->|Struct| API
5. Migrations: Evoluindo o Esquema 📈
O GORM cuida da criação e atualização das tabelas para você através do AutoMigrate. Se você adicionar um campo novo na Struct, o GORM cria a coluna no banco na próxima execução!
6. Mini-Projeto: API com Persistência Real 🚀
Modifique sua API de Clientes (da aula anterior) para que: 1. Os dados não sejam mais salvos em um slice, mas sim no banco de dados via GORM. 2. Ao iniciar a aplicação, as tabelas sejam criadas automaticamente.
7. Exercícios de Fixação 🧠
- O que a tag
gorm.Modeladiciona à sua struct? - Como você faria uma busca filtrada (WHERE) usando GORM?
- Qual a vantagem de usar
AutoMigrateem vez de criar tabelas manualmente no terminal SQL?
Próxima Aula: Vamos garantir que tudo funcione com Testes Automatizados! ✅🐹
Aula 13 - Testes em Go ✅
Objetivo
Objetivo: Compreender a importância dos testes automatizados, aprender a usar a ferramenta nativa go test e aplicar técnicas de TDD e Mocking.
1. Por que testar? 🧪
Testes automatizados garantem que seu código funciona como esperado e permitem que você faça refatorações com segurança. Em Go, o suporte a testes é nativo e integrado à linguagem.
2. Escrevendo seu Primeiro Teste 📝
Arquivos de teste em Go devem terminar obrigatoriamente com _test.go.
Exemplo: calculadora_test.go
package calculadora
import "testing"
func TestSoma(t *testing.T) {
resultado := Soma(2, 3)
esperado := 5
if resultado != esperado {
t.Errorf("Resultado incorreto: obtive %d, queria %d", resultado, esperado)
}
}
Para rodar os testes, use o comando:
3. Testes de Tabela (Table-Driven Tests) 📊
Esta é a forma idiomática e profissional de escrever testes em Go, permitindo testar vários cenários em uma única função.
func TestSomaMultipla(t *testing.T) {
cenarios := []struct {
a, b, esperado int
}{
{1, 1, 2},
{10, 20, 30},
{-1, 1, 0},
}
for _, c := range cenarios {
res := Soma(c.a, c.b)
if res != c.esperado {
t.Errorf("Erro ao somar %d+%d: obtive %d", c.a, c.b, res)
}
}
}
4. Cobertura de Testes 📈
Go pode te dizer exatamente qual porcentagem do seu código está sendo testada.
5. Mocking em APIs 🎭
Ao testar handlers, não queremos chamar o banco de dados real. Usamos o pacote httptest para simular requisições HTTP.
graph LR
Test[Test Code] -->|Request Fake| Handler[API Handler]
Handler -->|Mock| Service[Service Interface]
Service -->|Retorna Falso| Handler
Handler -->|Response 200| Test
6. Mini-Projeto: TDD na Prática 🚀
Utilizando TDD (Test Driven Development):
1. Escreva primeiro um teste para uma função InverterString(s string) string.
2. Rode o teste e veja-o falhar.
3. Implemente a função até que o teste passe.
7. Exercícios de Fixação 🧠
- Qual o sufixo obrigatório de um arquivo de teste em Go?
- O que a flag
-vfaz no comandogo test? - Qual a vantagem dos Testes de Tabela em relação a testes individuais?
Próxima Aula: Vamos organizar o código como profissionais com Clean Architecture! 🏗️🐹
Aula 14 - Arquitetura e Boas Práticas 🏗️
Objetivo
Objetivo: Entender os princípios da Clean Architecture, como aplicar Injeção de Dependência em Go e como organizar projetos de forma que sejam escaláveis e fáceis de manter.
1. Clean Architecture (Arquitetura Limpa) 🧊
A Clean Architecture foca na independência de frameworks, UI e banco de dados. O coração da aplicação é a Lógica de Negócio (Entidades e Casos de Uso).
As Camadas:
- Entities/Models: Regras de negócio globais.
- Usecases/Services: Lógica específica da aplicação.
- Interfaces/Adapters: Conecta o mundo externo (Handlers, Repositories).
- Infrastructure: Frameworks, Banco de Dados, Loggers.
2. Injeção de Dependência (DI) 💉
Em Go, aplicamos DI de forma manual e simples, geralmente via construtores que aceitam interfaces.
type Service struct {
repo RepositoryInterface
}
func NewService(r RepositoryInterface) *Service {
return &Service{repo: r}
}
Isso permite que você troque o banco de dados real por um mock nos testes com facilidade.
3. Organização de Diretórios (Padrão Go) 📂
Um projeto profissional em Go costuma seguir esta estrutura:
$ tree
.
├── cmd/ # Ponto de entrada (main.go)
├── internal/ # Código privado (Business Logic)
│ ├── entity/
│ ├── service/
│ └── repository/
├── pkg/ # Código que pode ser importado por outros
└── api/ # Definições de API (Swagger/Proto)
4. O Fluxo de Controle (Mermaid) 📊
graph TD
UI[Handlers/Controllers] --> UC[UseCases/Services]
UC --> DB[Repositories/Interfaces]
DB --> SQL[(Database SQL)]
subgraph "Camadas Externas"
UI
SQL
end
subgraph "Core da Aplicação"
UC
DB
end
5. Boas Práticas (Cringe Free!) ✨
- Nomeie pacotes com substantivos simples:
user,auth,order(eviteutils,helpers). - Retorne structs, aceite interfaces: Isso dá flexibilidade para quem consome seu código.
- Mantenha o
main.gomagro: Ele só deve "fiar" as dependências e iniciar o servidor.
6. Mini-Projeto: Refatorando para DI 🚀
Pegue sua API da Aula 12 e: 1. Crie uma interface para o seu Repository. 2. Altere o seu Service/Handler para receber essa interface no construtor. 3. Verifique se o seu código continua funcionando após a refatoração.
7. Exercícios de Fixação 🧠
- Qual a principal vantagem da Clean Architecture?
- Por que usamos a pasta
internalem Go? - Como a Injeção de Dependência ajuda no desacoplamento do código?
Próxima Aula: Vamos colocar tudo no container com Docker e preparar o Deploy! 🐳🐹
Aula 15 - Docker e Deploy 🐳
Objetivo
Objetivo: Aprender a "conteinerizar" uma aplicação Go usando Docker, otimizando o tamanho da imagem com Multi-Stage Builds e preparando o ambiente para produção.
1. Por que usar Docker com Go? 🚀
Go gera binários estáticos, o que significa que eles não precisam de um runtime (como Python ou Node) instalado no servidor. O Docker ajuda a empacotar esse binário com suas dependências de sistema e arquivos estáticos, garantindo que o programa rode igual em qualquer lugar.
2. Multi-Stage Builds: O Segredo da Eficiência 🏗️
Como o Go só precisa do binário para rodar, não precisamos levar o compilador para a imagem final. Usamos dois estágios no Dockerfile:
# Estágio 1: Compilação
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o main cmd/main.go
# Estágio 2: Execução (Imagem Final)
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/main .
CMD ["./main"]
Isso reduz uma imagem de 300MB+ para apenas 15MB!
3. Docker Compose: Orquestrando Dependências 🎼
Se sua API precisa de um banco de dados, o docker-compose.yml facilita subir tudo junto.
services:
app:
build: .
ports: ["8080:8080"]
depends_on: [db]
db:
image: postgres:alpine
environment:
POSTGRES_PASSWORD: 123
4. O Fluxo de Deploy (Mermaid) 📊
graph LR
Dev[Dev Code] -->|Push| Git[GitHub/GitLab]
Git -->|CI/CD| Build[Build Docker Image]
Build -->|Push| Registry[Docker Hub/ECR]
Registry -->|Pull| Server[Production Server]
Server -->|Run| Container[Running App]
5. Variáveis de Ambiente e Configuração ⚙️
Nunca coloque senhas no código! Use variáveis de ambiente que o Go lê via os.Getenv e o Docker injeta.
6. Mini-Projeto: API no Container 🚀
Crie um Dockerfile para sua API de livros e:
1. Gere a imagem via terminal.
2. Suba um container mapeando a porta 8080.
3. Acesse a API pelo navegador e verifique se ela responde corretamente.
7. Exercícios de Fixação 🧠
- Para que serve o "Multi-Stage Build" no Dockerfile?
- Qual a vantagem de usar imagens
alpine? - Como você passa uma variável de ambiente para um container Docker via linha de comando?
Próxima Aula: É hora de aplicar tudo no nosso Projeto Final! 🏆🐹
Aula 16 - Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆
Objetivo
Objetivo: Consolidar todos os conhecimentos adquiridos (Fundamentos, Web, Banco de Dados, Testes e Docker) através da construção de um projeto completo e profissional.
1. O Desafio 🚩
Você deve construir uma API REST de Gerenciamento de Livros e Empréstimos. O sistema deve permitir que usuários consultem livros, se cadastrem e realizem empréstimos.
Requisitos Funcionais:
- Cadastro e Listagem de Livros.
- Cadastro de Usuários.
- Realização de Empréstimo (Verificando se o livro está disponível).
- Devolução de Livros.
2. Requisitos Técnicos (Obrigatórios) 🛠️
- Linguagem: Go (Golang).
- Framework Web: Gin Gonic.
- Banco de Dados: PostgreSQL (via GORM).
- Arquitetura: Clean Architecture (divida em camadas: Handler, Service, Repository, Entity).
- Qualidade: Ao menos 3 testes unitários significativos.
- Infra: Dockerfile e Docker Compose configurados.
3. Estrutura Sugerida do Projeto 📂
/projeto-final
├── cmd/ # Main.go
├── internal/ # Camadas da Clean Arch
│ ├── handler/ # Gin Handlers
│ ├── service/ # Lógica de Empréstimo
│ ├── repository/ # GORM Repos
│ └── entity/ # Structs Models
├── scripts/ # SQL ou outros auxiliares
├── docker-compose.yml
└── Dockerfile
4. Diagrama da Entidade Relacional (Mermaid) 📊
erDiagram
LIVRO ||--o{ EMPRESTIMO : possui
USUARIO ||--o{ EMPRESTIMO : faz
LIVRO {
int id
string titulo
string autor
bool disponivel
}
USUARIO {
int id
string nome
string email
}
EMPRESTIMO {
int id
int livro_id
int usuario_id
date data_emprestimo
}
5. Dicas para o Sucesso 💡
- Pense nos erros: O que acontece se alguém tentar pegar um livro que já está emprestado?
- Use Middlewares: Adicione um log simples para cada requisição.
- Documentação: Um arquivo
README.mdbem escrito faz toda a diferença!
6. Conclusão da Jornada 🏁
Parabéns! Você completou o curso de Programação em Go. Você agora possui as ferramentas necessárias para construir sistemas robustos, rápidos e escaláveis no backend.
Important
O aprendizado não para aqui. Continue explorando a comunidade Go, leia o código fonte da biblioteca padrão e construa seus próprios projetos! 🐹🚀
Próximo Passo: Realize a entrega do seu projeto final e solicite seu feedback! 🎓🐹🏆🚀
Aula 17 - Concorrência Extrema com Goroutines e Channels 🐹
Objetivo Pedagógico
Objetivo: Domínio do modelo de concorrência Communicating Sequential Processes (CSP) em Go: Goroutines leves, canais unbuffered/buffered, multiplexação com select e sync.WaitGroup.
📑 1. Fundamentos Teóricos & Análise Técnica
O principal diferencial da linguagem Go reside em seu modelo nativo de concorrência baseado no formalismo matemático CSP (Communicating Sequential Processes) de Tony Hoare. O mantra canônico de Go sintetiza essa filosofia: "Não se comunique compartilhando memória; em vez disso, compartilhe memória comunicando-se".
Componentes do motor de execução concorrente de Go: 1. Goroutines: Threads leves gerenciadas pelo runtime de Go em espaço de usuário (não pelo kernel do sistema operacional). Enquanto uma thread do SO aloca tipicamente 1MB a 8MB de pilha (stack), uma goroutine inicia com apenas 2KB de pilha, que cresce e encolhe dinamicamente na heap conforme a demanda. Isso permite que um único processo hospede centenas de milhares de goroutines simultâneas. 2. Canais (Channels): Tubos tipados através dos quais dados são transmitidos entre goroutines de forma sincronizada e thread-safe sem travas explícitas (mutexes). 3. Escalonador Go M:N (GMP Scheduler): Multiplexa M goroutines em N threads do SO distribuídas sobre P processadores lógicos, implementando roubo de trabalho (work-stealing) para balanceamento de carga de CPU.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
subgraph GMPScheduler ["Go GMP Scheduler Runtime"]
P1["Processador Lógico P1"] --> G1["Goroutine G1"]
P1 --> G2["Goroutine G2"]
P2["Processador Lógico P2"] --> G3["Goroutine G3"]
end
G1 -->|Canal Tipado (ch <- dado)| Ch["Channel Sincronizado"]
Ch -->|Leitura (dado := <-ch)| G3
style GMPScheduler fill:#e3f2fd,stroke:#1565c0
style Ch fill:#fff3e0,stroke:#e65100
style G1 fill:#e8f5e9,stroke:#2e7d32
style G3 fill:#e8f5e9,stroke:#2e7d32
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais:
- Pilha Dinâmica de 2KB: Consumo minúsculo de memória viabilizando concorrência massiva.
- Multiplexação com select: Capacidade de aguardar a resolução do primeiro canal pronto de forma não-bloqueante.
- Prevenção de Goroutine Leaks: Uso obrigatório de context.Context para cancelar goroutines quando a conexão do cliente é interrompida.
- Sincronização com sync.WaitGroup: Coordenação determinística da conclusão de tarefas em paralelo.
🛠️ 2. Implementação Prática em Golang Runtime e Concorrência CSP
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// worker_pool.go (Padrão Worker Pool com Canais e WaitGroup)
package main
import (
"fmt"
"sync"
"time"
)
// Função que executa o trabalho em background
func worker(id int, jobs <-chan int, results chan<- int, wg *sync.WaitGroup) {
defer wg.Done()
for j := range jobs {
fmt.Printf("[Worker %d] Processando job %d\n", id, j)
time.Sleep(100 * time.Millisecond) // Simula computação
results <- j * 2
}
}
func main() {
const numJobs = 10
const numWorkers = 3
jobs := make(chan int, numJobs)
results := make(chan int, numJobs)
var wg sync.WaitGroup
// Inicializa 3 workers concorrentes
for w := 1; w <= numWorkers; w++ {
wg.Add(1)
go worker(w, jobs, results, &wg)
}
// Envia jobs para o canal
for j := 1; j <= numJobs; j++ {
jobs <- j
}
close(jobs) // Fecha para sinalizar aos workers o fim da fila
wg.Wait()
close(results)
for res := range results {
fmt.Println("Resultado coletado:", res)
}
}
💡 Análise Passo a Passo do Código
- Canais com Buffer:
make(chan int, numJobs)evita bloqueio desnecessário dos produtores antes do esgotamento da capacidade. - Coordenação com WaitGroup:
wg.Add(1)edefer wg.Done()garantem que a funçãomainaguarde a finalização de todos os workers. - Fechamento com close():
close(jobs)notifica a cláusularangedentro de cada worker de que não haverá novos dados.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 18 - Construção de APIs REST com Gin e GORM 🚀
Objetivo Pedagógico
Objetivo: Desenvolvimento de APIs RESTful de alto rendimento em Go utilizando o framework Gin (Radix Tree Router), serialização JSON rápida e persistência com GORM.
📑 1. Fundamentos Teóricos & Análise Técnica
A combinação do framework web Gin com o ORM GORM representa um dos padrões mais produtivos e amplamente adotados na indústria para o desenvolvimento de microsserviços em linguagem Go.
- Gin Web Framework: É famoso por sua velocidade de roteamento, implementada sobre uma estrutura de dados de Radix Tree (Árvore de Prefixos Compacta). Isso confere complexidade de busca \(O(k)\) (onde \(k\) é o comprimento da rota), dispensando expressões regulares lentas e alocando zero memória na heap (zero memory allocation) durante a resolução da rota.
- GORM (Go Object-Relational Mapping): Abstrai a manipulação SQL com suporte a migrações automáticas (
AutoMigrate), relacionamentos tipados (BelongsTo,HasMany,Many2Many), ganchos de ciclo de vida (hooks comoBeforeCreate) e transações aninhadas seguras. - Contexto de Requisição (
gin.Context): Centraliza o fluxo de manipulação de headers, vinculação de payloads (c.ShouldBindJSON) e renderização rápida de respostas JSON.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph LR
HTTPReq["Requisição HTTP: GET /api/v1/users/:id"] --> GinRouter["Gin Radix Tree Router (Zero Alloc)"]
GinRouter --> Middlewares["Middlewares (Recovery, Logger, Auth)"]
Middlewares --> Handler["Gin Handler Function"]
Handler --> GORM["GORM Engine (SQL Parametrizado)"]
GORM --> Postgres["PostgreSQL / MySQL"]
Handler --> Response["c.JSON(200, user)"]
style HTTPReq fill:#e1f5fe,stroke:#01579b
style GinRouter fill:#fff3e0,stroke:#e65100
style GORM fill:#e8f5e9,stroke:#2e7d32
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais:
- Radix Tree Routing: Roteamento ultrarrápido sem alocação de memória na heap por requisição.
- Binding Automático e Validação: Uso de tags binding:"required,min=3" baseadas no pacote go-playground/validator.
- Middleware de Recuperação (Panic Recovery): Captura de pânico em tempo de execução sem derrubar o processo do servidor.
- Transações Atômicas no GORM: Uso de db.Transaction(func(tx *gorm.DB) error { ... }) para atomicidade estrita.
🛠️ 2. Implementação Prática em Golang, Framework Gin e GORM
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// api_server.go (API REST Completa com Gin e GORM)
package main
import (
"net/http"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
type Product struct {
ID uint `gorm:"primaryKey" json:"id"`
Title string `gorm:"size:255;not null" json:"title" binding:"required"`
Price float64 `gorm:"not null" json:"price" binding:"required,gt=0"`
}
func main() {
db, err := gorm.Open(sqlite.Open("products.db"), &gorm.Config{})
if err != nil {
panic("Falha ao conectar no banco de dados!")
}
db.AutoMigrate(&Product{})
r := gin.Default()
r.POST("/products", func(c *gin.Context) {
var product Product
if err := c.ShouldBindJSON(&product); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
db.Create(&product)
c.JSON(http.StatusCreated, product)
})
r.Run(":8080")
}
💡 Análise Passo a Passo do Código
- Tags de Estrutura Duplas: Uso conjunto de
gorm:"..."para mapeamento de banco ejson:"..."para serialização de rede. - Validação Integrada:
binding:"required,gt=0"valida que o preço seja informado e estritamente positivo antes de tocar o banco. - AutoMigrate: O GORM sincroniza o esquema das tabelas automaticamente na inicialização sem arquivos complexos de configuração.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 19 - Testes de Benchmark e Perfilamento de Memória (pprof) 🔬
Objetivo Pedagógico
Objetivo: Medição de latência e consumo de alocação de memória na heap com testes de benchmark (testing.B), análise de flame graphs e detecção de gargalos com pprof.
📑 1. Fundamentos Teóricos & Análise Técnica
Uma das grandes forças de Go em relação a outras linguagens de backend é o ecossistema de ferramentas de engenharia de desempenho integrado nativamente à ferramenta de linha de comando (go test, go tool pprof, go tool trace).
- Testes de Benchmark (
testing.B): Funções prefixadas comBenchmarkque executam o algoritmo alvo em um laço de repetições adaptativo (b.N), calculando automaticamente a média de nanossegundos por operação (ns/op), bytes alocados (B/op) e número de alocações na heap (allocs/op). - Perfilamento com
pprof: Módulo que coleta dados estatísticos em tempo de execução através de amostragem de interrupções de CPU e rastreamento de alocações de memória. - Gráficos Flame Graphs: Visualização hierárquica em chamas gerada pelo comando
go tool pprof -http=:8081que expõe visualmente as funções que mais consomem tempo de CPU ou retêm memória na Heap, permitindo otimizações cirúrgicas de código.
📐 Arquitetura Conceitual & Diagrama de Fluxo
flowchart LR
Code["Código em Go"] --> Bench["go test -bench=. -benchmem"]
Bench --> Metrics["Métricas: ns/op, B/op, allocs/op"]
Code --> Pprof["import _ net/http/pprof"]
Pprof --> Profile["Arquivo de Perfil: cpu.prof / mem.prof"]
Profile --> WebUI["go tool pprof -http=:8081 (Flame Graphs)"]
WebUI --> Optimize["Otimização de Estruturas de Dados e Alocações"]
style Code fill:#e1f5fe,stroke:#01579b
style Bench fill:#fff3e0,stroke:#e65100
style WebUI fill:#e8f5e9,stroke:#2e7d32
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais:
- Benchmarking com b.ResetTimer(): Isolamento do tempo de setup prévio para medir estritamente o código de interesse.
- Métrica de Alocações (-benchmem): Identificação de variáveis que escapam para a Heap (Escape Analysis).
- Perfilamento em Produção Não-Invasivo: O pprof consome menos de 1% a 2% de overhead de CPU durante a amostragem.
- Escape Analysis (-gcflags='-m'): Diagnóstico estático para manter estruturas alocadas na pilha rápida (Stack).
🛠️ 2. Implementação Prática em Go Toolchain, Benchmarks e pprof
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// string_bench_test.go (Benchmark de Concatenação vs. strings.Builder)
package main
import (
"strings"
"testing"
)
// Concatenação ingênua (Ineficiente - gera muitas alocações na Heap)
func BenchmarkStringConcat(b *testing.B) {
for i := 0; i < b.N; i++ {
s := ""
for j := 0; j < 100; j++ {
s += "a"
}
}
}
// Concatenação eficiente com strings.Builder (Zero alocações desnecessárias)
func BenchmarkStringBuilder(b *testing.B) {
for i := 0; i < b.N; i++ {
var builder strings.Builder
builder.Grow(100) // Pré-aloca capacidade
for j := 0; j < 100; j++ {
builder.WriteString("a")
}
_ = builder.String()
}
}
💡 Análise Passo a Passo do Código
- Laço Adaptativo b.N: O executor aumenta progressivamente
b.N(1000, 10000, 1000000) até atingir estabilidade estatística confiável. - Otimização com strings.Builder: Demonstra na prática a redução de centenas de alocações na Heap para uma única alocação inicial.
- Execução via CLI: Comando
go test -bench=. -benchmemexpõe a diferença gritante de desempenho entre os métodos.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 20 - Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🏆
Objetivo Pedagógico
Objetivo: Construção de um microsserviço de alta vazão e baixíssima latência em Go, combinando Gin, pool de conexões otimizado, cache Redis em memória e Docker multi-stage.
📑 1. Fundamentos Teóricos & Análise Técnica
O Projeto Capstone de Especialização em Backend Go desafia o estudante a atuar como Engenheiro de Baixa Latência, construindo um Motor de Autenticação e Gestão de Sessões Distribuídas capaz de processar mais de 25.000 requisições por segundo com latência p99 inferior a 10 milissegundos.
A arquitetura do projeto implementa:
1. Estrutura Clean Architecture em Go: Separação em pacotes domain, usecase, repository e delivery/http.
2. Camada de Dados Otimizada: PostgreSQL acessado com pool de conexões ajustado (SetMaxOpenConns, SetMaxIdleConns) e cache Redis com pipeline atômico.
3. Controle de Concorrência com Context: Propagação de timeouts estritos em todas as queries com context.WithTimeout.
4. Empacotamento Docker Scratch: Construção de imagens Docker baseadas na imagem vazia FROM scratch, gerando imagens de produção finais com menos de 15MB.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
Client["Tráfego Massivo (25k req/s)"] --> Gin["Gin Engine HTTP"]
Gin --> Timeout["Context com Timeout de 50ms"]
Timeout --> Redis["Redis In-Memory (Cache Hit < 1ms)"]
Timeout --> DB["PostgreSQL (Pool de Conexões Concorrentes)"]
Gin --> Telemetry["Métricas Prometheus (/metrics)"]
style Client fill:#e1f5fe,stroke:#01579b
style Gin fill:#fff3e0,stroke:#e65100
style Redis fill:#e8f5e9,stroke:#2e7d32
style DB fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais:
- Binário Estático Único: Compilação sem dependências de bibliotecas dinâmicas do sistema operacional (CGO_ENABLED=0).
- Imagens Docker Mínimas: Segurança máxima e superfície de ataque praticamente nula com contêineres baseados em scratch.
- Latência Previsível: Ausência de pausas longas de Garbage Collection graças à gestão disciplinada de alocações na pilha.
- Prontidão para Kubernetes: Implementação de probes /healthz e graceful shutdown com interceptação de sinais SIGTERM.
🛠️ 2. Implementação Prática em Golang, Gin, Redis, PostgreSQL e Docker
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// Dockerfile (Build Multi-Stage Otimizado para Produção em Go)
# Estágio 1: Compilação do Binário
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
# Compilação estática sem CGO
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /app/server .
# Estágio 2: Imagem Final Mínima (Scratch)
FROM scratch
WORKDIR /root/
# Certificados SSL para requisições HTTPS externas
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /app/server .
EXPOSE 8080
ENTRYPOINT ["./server"]
💡 Análise Passo a Passo do Código
- Flags de Compilação -s -w: Remove tabelas de símbolos e informações de depuração, reduzindo o binário em cerca de 30%.
- Imagem Base Scratch: A imagem de produção resultante contém apenas o binário estático e os certificados SSL, totalizando cerca de 12MB.
- Segurança Corporativa: Impossibilidade de execução de exploits baseados em shell, pois a imagem não contém bash nem utilitários do sistema.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Exercícios
🏋️ Exercícios do Curso
Lista completa das 20 unidades de exercicios organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
Exercícios: Introdução ao Go e Ecossistema 🐹
Instruções
Responda aos exercícios abaixo para consolidar seu aprendizado sobre a história e o ambiente do Go.
🟢 Nível: Básico
- A História: Quem são os três criadores originais da linguagem Go no Google?
- O Comando: Qual comando do terminal é utilizado para inicializar um novo módulo Go em uma pasta?
🟡 Nível: Intermediário
- Filosofia: Explique, com suas palavras, por que o Go é considerado uma linguagem focada em produtividade e simplicidade em comparação ao C++.
- Execução: Qual a diferença prática entre os comandos
go run main.goego build main.go? Em qual situação você usaria cada um?
🔴 Nível: Desafio
5. Multi-Platform: Pesquise sobre a variável de ambiente GOOS e GOARCH. Como você faria para compilar um executável Windows (.exe) estando em uma máquina Linux ou macOS? Escreva o comando necessário.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: A História **Resposta Comentada:** - **Fundamentação:** No contexto de **Introdução ao Go e Ecossistema**, o conceito abordado (A História) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: O Comando **Resolução e Implementação:**// Estrutura de implementação recomendada para O Comando
// Validação de regras de negócio e retorno consistente
Exercícios: Fundamentos da Linguagem 🧱
Instruções
Pratique a sintaxe básica de Go com estes exercícios.
🟢 Nível: Básico
- Tipagem: Tente somar um
inte umfloat64em um programa. O que acontece? Como você resolve isso? - Shorthand: Transforme a declaração
var count int = 10para a forma curta (short declaration).
🟡 Nível: Intermediário
- Estruturas: Crie um programa que use um
switchpara imprimir o nome do mês baseado em um número de 1 a 12. - Loops: Escreva um loop
forque imprima apenas os números pares de 1 a 20.
🔴 Nível: Desafio
5. Tabuada Dinâmica: Crie um programa que peça (via fmt.Scan) um número ao usuário e imprima a tabuada desse número de 1 a 10, utilizando um loop for.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Tipagem **Resolução e Implementação:**// Estrutura de implementação recomendada para Tipagem
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Estruturas
// Validação de regras de negócio e retorno consistente
Exercícios: Funções e Organização do Código 🧩
Instruções
Teste seus conhecimentos sobre funções, pacotes e ponteiros.
🟢 Nível: Básico
- Sintaxe: Crie uma função chamada
saudarque recebe um nome (string) e retorna uma saudação formatada. - Múltiplos Retornos: Escreva uma função que receba dois números e retorne a soma e a subtração deles simultaneamente.
🟡 Nível: Intermediário
- Ponteiros: Crie uma função
zerarque recebe um ponteiro para um inteiro (*int) e define o valor no endereço de memória como 0. - Variádicas: Escreva uma função
mediaque aceite uma quantidade variável de números (float64) e retorne a média aritmética deles.
🔴 Nível: Desafio
5. Multi-Package: Crie um pequeno sistema onde o pacote matematica contém uma função Fatorial e o arquivo main.go utiliza essa função para calcular o fatorial de um número digitado pelo usuário.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Sintaxe **Resolução e Implementação:**// Estrutura de implementação recomendada para Sintaxe
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Múltiplos Retornos
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Ponteiros
// Validação de regras de negócio e retorno consistente
Exercícios: Estruturas de Dados Avançadas 🗄️
Instruções
Exercite o uso de Slices, Maps e Structs em Go.
🟢 Nível: Básico
- Slices: Crie um slice de strings com 3 nomes de cidades. Use
appendpara adicionar uma quarta cidade. - Maps: Crie um mapa que armazena nomes de países (chave) e suas capitais (valor). Imprima a capital do Brasil.
🟡 Nível: Intermediário
- Structs: Defina uma struct
ProdutocomNome,PrecoeQuantidade. Crie uma instância e imprima o valor total em estoque (Preco * Quantidade). - Slicing: Dado o slice
numeros := []int{10, 20, 30, 40, 50}, extraia um novo slice que contenha apenas os valores20, 30, 40.
🔴 Nível: Desafio
5. Sistema de Estoque: Crie um programa que use um map[string]Produto. O usuário deve poder digitar o nome de um produto e o programa exibe todos os detalhes daquela struct Produto. Se o produto não existir, exiba uma mensagem de erro.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Slices **Resolução e Implementação:**// Estrutura de implementação recomendada para Slices
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Maps
// Validação de regras de negócio e retorno consistente
Exercícios: Interfaces e Composição 🧩
Instruções
Aplique os conceitos de Polimorfismo e Composição em Go.
🟢 Nível: Básico
- Interfaces: Crie uma interface chamada
Formacom o métodoArea() float64. - Implementação: Crie uma struct
Quadrado(com campoLado) que implemente a interfaceForma.
🟡 Nível: Intermediário
- Múltiplas Formas: Crie uma struct
Circulo(com campoRaio) que também implementeForma. Crie uma função que receba um slice deFormae imprima a área de cada uma. - Composição: Crie uma struct
Endereco(Rua, Cidade) e uma structPessoaque contenha umEnderecovia composição (embedding). Imprima os dados da pessoa e seu endereço.
🔴 Nível: Desafio
5. Simulador de Notificações: Crie uma interface Notificador com o método Enviar(mensagem string). Implemente dois tipos: Email e SMS. Crie uma função que receba um Notificador e dispare uma mensagem de "Bem-vindo" usando ambos os tipos.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Interfaces **Resolução e Implementação:**// Estrutura de implementação recomendada para Interfaces
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Implementação
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Múltiplas Formas
// Validação de regras de negócio e retorno consistente
Exercícios: Tratamento de Erros ⚠️
Instruções
Pratique a captura e criação de erros em Go.
🟢 Nível: Básico
- Check de Erro: Escreva uma função que leia o nome de um arquivo do terminal e tente abri-lo usando
os.Open. Trate o erro caso o arquivo não exista. - Panic: Crie uma função que cause um
panicpropositalmente (ex: divisão por zero ou acesso a índice inexistente em slice).
🟡 Nível: Intermediário
- Recover: Use o
recoverpara capturar o panic do exercício anterior e imprimir uma mensagem amigável sem derrubar o programa. - Custom Error: Defina uma variável de erro
ErrIdadeInvalidae use-a em uma funçãoVerificarIdade(idade int).
🔴 Nível: Desafio
5. Calculadora Segura: Crie uma função Dividir(a, b float64) (float64, error). Se b for 0, retorne um erro detalhado usando fmt.Errorf incluindo os valores de a e b. No main, execute essa função e trate o erro exibindo-o no console.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Check de Erro **Resolução e Implementação:**// Estrutura de implementação recomendada para Check de Erro
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Panic
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Recover
// Validação de regras de negócio e retorno consistente
Exercícios: Manipulação de Arquivos e JSON 📁
Instruções
Trabalhe com persistência de dados e o formato JSON.
🟢 Nível: Básico
- Escrita: Crie um programa que salve a frase "Go é incrível para Backend!" em um arquivo chamado
aprendizado.txt. - JSON Tags: Crie uma struct
Configcom camposPortaeDebug. Adicione struct tags para que no JSON apareçam comoapp_portedebug_mode.
🟡 Nível: Intermediário
- Marshal/Unmarshal: Crie uma instância de
Config, converta para JSON e imprima a string. Depois, pegue essa string e converta de volta para uma nova struct. - Leitura de Arquivo: Crie um programa que leia o arquivo
aprendizado.txte conte quantas letras existem no arquivo.
🔴 Nível: Desafio
5. Gerenciador de Contatos: Crie um programa que salve um slice de structs Contato (Nome, Telefone) em um arquivo agenda.json. O programa deve ler o arquivo ao iniciar e permitir que o usuário adicione novos contatos via terminal.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Escrita **Resolução e Implementação:**// Estrutura de implementação recomendada para Escrita
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para JSON Tags
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Marshal/Unmarshal
// Validação de regras de negócio e retorno consistente
Exercícios: Concorrência em Go ⚡
Instruções
Explore o poder das Goroutines e Channels.
🟢 Nível: Básico
- Goroutine: Crie uma função que imprima números de 1 a 10 e execute-a como uma goroutine no
main. Verifique se o programa termina antes dela terminar (e como resolver isso comtime.Sleep). - Canais: Crie um canal de inteiros, envie o número 42 em uma goroutine e receba no
main, imprimindo o valor.
🟡 Nível: Intermediário
- Buffer: Crie um canal com buffer de tamanho 2. Envie 2 mensagens sem precisar de uma goroutine consumidora imediata. O que acontece se enviar a 3ª?
- Soma Concorrente: Crie duas goroutines, cada uma calcula a soma de uma metade de um slice de números. Elas devem enviar os resultados parciais para um canal e o
maindeve somar os dois.
🔴 Nível: Desafio
5. Ping-Pong: Crie duas goroutines chamadas "Ping" e "Pong". Elas devem trocar uma "bola" (um contador que incrementa) através de um canal. O programa deve parar quando o contador chegar a 10. Use o select para monitorar a troca.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Goroutine **Resolução e Implementação:**// Estrutura de implementação recomendada para Goroutine
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Canais
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Buffer
// Validação de regras de negócio e retorno consistente
Exercícios: Programação Web com net/http 🌐
Instruções
Pratique a criação de servidores e manipulação de requisições HTTP.
🟢 Nível: Básico
- Servidor Simples: Crie um servidor que responda "Bem-vindo ao Go Web!" na rota
/home. - Portas: Tente rodar dois servidores Go simultâneos em portas diferentes (ex: 8080 e 9090).
🟡 Nível: Intermediário
- Status Codes: Crie um handler que verifique se um parâmetro
adminna URL é igual atrue. Se for, responda200 OK. Se não, responda403 Forbidden. - JSON Response: Modifique seu handler para que ele retorne um JSON simples:
{"status": "ativo", "mensagem": "API rodando"}. Lembre-se de definir oContent-Typecomoapplication/json.
🔴 Nível: Desafio
5. Calculadora Web: Crie um servidor que receba dois números via Query Params (ex: /?a=10&b=5) e uma operação (op=soma). O servidor deve realizar o cálculo e retornar o resultado em texto puro. Trate o erro caso os valores não sejam números válidos.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Servidor Simples **Resolução e Implementação:**// Estrutura de implementação recomendada para Servidor Simples
// Validação de regras de negócio e retorno consistente
Exercícios: Construindo APIs REST 🏗️
Instruções
Organize seu código e implemente padrões RESTful.
🟢 Nível: Básico
- Camadas: Crie uma pasta
modelse mova uma struct de sua escolha para lá. Importe-a no seumain.go. - Verbo POST: Crie um handler que receba um JSON e apenas o imprima no console do servidor.
🟡 Nível: Intermediário
- Busca por ID: Implemente uma lógica que, dada uma lista de produtos, retorne apenas o produto que tenha o ID passado na URL (Dica: use
strings.Splitno Path para pegar o ID). - Status Codes: Garanta que sua API retorne
201 Createdao criar um recurso e404 Not Foundse um recurso solicitado não existir na lista.
🔴 Nível: Desafio
5. CRUD In-Memory: Crie um CRUD completo (Create, Read, Update, Delete) para uma struct Cliente usando apenas o pacote net/http e um slice global para armazenar os dados. Teste cada rota usando o Postman ou Insomnia.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Camadas **Resolução e Implementação:**// Estrutura de implementação recomendada para Camadas
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Verbo POST
// Validação de regras de negócio e retorno consistente
Exercícios: Framework Web Gin 🚀
Instruções
Explore as facilidades do Gin para criar APIs robustas.
🟢 Nível: Básico
- Instalação: Inicialize um módulo Go e instale o Gin usando
go get -u github.com/gin-gonic/gin. - Primeira Rota: Crie um servidor Gin que responda com um JSON de boas-vindas na rota raiz
/.
🟡 Nível: Intermediário
- Parâmetros: Crie uma rota
/ola/:nomeque responda "Olá, [nome]" tanto em texto puro quanto em um campo JSON. - Grupos: Crie um grupo de rotas
/api/v1e coloque dentro dele uma rota destatusque retorne a versão da API.
🔴 Nível: Desafio
5. Validação de Cadastro: Crie uma struct Usuario com campos Email (obrigatório) e Senha (obrigatório e mínimo de 6 caracteres - pesquise sobre a tag binding). Implemente uma rota POST /cadastro que valide esses dados e retorne um erro amigável caso a validação falhe.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Instalação **Resposta Comentada:** - **Fundamentação:** No contexto de **Framework Web Gin**, o conceito abordado (Instalação) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Primeira Rota **Resolução e Implementação:**// Estrutura de implementação recomendada para Primeira Rota
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Parâmetros
// Validação de regras de negócio e retorno consistente
Exercícios: Banco de Dados (GORM) 💾
Instruções
Pratique a integração de banco de dados em aplicações Go.
🟢 Nível: Básico
- Conexão: Crie um programa que conecte a um banco SQLite local chamado
estudos.db. - Model: Crie uma struct
Livroe use oAutoMigratepara criar essa tabela no banco.
🟡 Nível: Intermediário
- Seed: Crie uma função que insira 5 livros iniciais no banco caso a tabela esteja vazia.
- Busca: Escreva uma consulta GORM que retorne todos os livros com preço maior que 50 reais.
🔴 Nível: Desafio
5. API Persistente: Crie duas rotas no Gin: GET /livros (lista todos do banco) e POST /livros (salva um novo no banco). Verifique se os dados permanecem salvos mesmo após reiniciar o servidor.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conexão **Resolução e Implementação:**// Estrutura de implementação recomendada para Conexão
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Model
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Seed
// Validação de regras de negócio e retorno consistente
Exercícios: Testes em Go ✅
Instruções
Garanta a qualidade do seu software com testes automatizados.
🟢 Nível: Básico
- Unitário: Crie uma função
Multiplicar(a, b int)e escreva um teste unitário simples em um arquivo separado. - Execução: Rode seus testes e gere um relatório de cobertura básico.
🟡 Nível: Intermediário
- Table-Driven: Transforme o teste da multiplicação em um teste de tabela com ao menos 5 cenários diferentes (incluindo números negativos e zero).
- Error Testing: Escreva um teste para uma função que retorna erro (ex:
Dividir). Verifique se o erro retornado é o esperado quando tentamos dividir por zero.
🔴 Nível: Desafio
5. API Test: Utilizando o pacote net/http/httptest, escreva um teste para um handler que retorna um JSON. O teste deve verificar se o Status Code é 200 OK e se o corpo da resposta contém um campo específico.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Unitário **Resolução e Implementação:**// Estrutura de implementação recomendada para Unitário
// Validação de regras de negócio e retorno consistente
Exercícios: Arquitetura e Boas Práticas 🏗️
Instruções
Aplique padrões de design para criar códigos mais limpos e testáveis.
🟢 Nível: Básico
- Refatoração: Mova sua struct principal para uma pasta chamada
entities. - Interface: Crie uma interface que defina as operações básicas de persistência de um objeto seu (ex:
Salvar,BuscarPorID).
🟡 Nível: Intermediário
- Injeção: Crie uma struct
Gestorque possua um campo que é a interface do exercício anterior. Crie uma funçãoNewGestorpara injetar a implementação. - Internal: Mova sua lógica de banco de dados para uma pasta
internal/repositorye verifique como as permissões de acesso funcionam entre pacotes.
🔴 Nível: Desafio
5. Mock Manual: Escreva um teste para o seu Gestor (do exercício 3). No teste, crie uma struct "fake" que implementa a interface de repositório (sem usar banco real) e injete-a no gestor. Verifique se o gestor chama os métodos corretamente.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Refatoração **Resposta Comentada:** - **Fundamentação:** No contexto de **Arquitetura e Boas Práticas ️**, o conceito abordado (Refatoração) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Interface **Resolução e Implementação:**// Estrutura de implementação recomendada para Interface
// Validação de regras de negócio e retorno consistente
Exercícios: Docker e Deploy 🐳
Instruções
Prepare sua aplicação para o mundo real usando containers.
🟢 Nível: Básico
- Dockerfile: Crie um arquivo
Dockerfilesimples para um "Hello World" em Go. - Imagens: Use o comando
docker buildpara criar a imagem edocker imagespara verificar o tamanho dela.
🟡 Nível: Intermediário
- Multi-Stage: Refatore seu Dockerfile para usar Multi-Stage Build e compare a diferença de tamanho entre a imagem de build e a imagem final.
- Execução: Suba um container rodando sua aplicação na porta 9000 e verifique se consegue acessá-la de fora do container.
🔴 Nível: Desafio
5. Compose Completo: Crie um arquivo docker-compose.yml que suba sua API (da aula 12) e um banco de dados PostgreSQL. Garante que a API espere o banco de dados estar pronto antes de tentar conectar.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Dockerfile **Resolução e Implementação:**// Estrutura de implementação recomendada para Dockerfile
// Validação de regras de negócio e retorno consistente
Projeto Final: Checklist de Entrega 🏆
Instruções
Utilize este checklist para garantir que seu projeto final atenda a todos os requisitos de qualidade e funcionalidade.
✅ Requisitos de Funcionalidade
- A rota
POST /livrosfunciona corretamente? - A rota
POST /emprestimosvalida se o livro está disponível antes de concluir? - É possível listar todos os empréstimos realizados?
✅ Requisitos Técnicos
- O código está organizado em pastas seguindo a Clean Architecture?
- O banco de dados PostgreSQL sobe corretamente via
docker-compose up? - Existe ao menos um arquivo
_test.gocom testes passando?
🚀 Desafio Extra (Opcional)
- Autenticação: Adicione um middleware de proteção simples (API Key) em rotas de cadastro.
- Swagger: Gere a documentação Swagger da sua API final.
- Deploy: Realize o deploy da imagem Docker em algum serviço gratuito (como Render ou Fly.io).
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: [ ] A rota `POST /livros` funciona corretamente? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Sistema de Gerenciamento de Biblioteca**, o conceito abordado ([ ] A rota `POST /livros` funciona corretamente?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: [ ] A rota `POST /emprestimos` valida se o livro está disponível antes de concluir? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Sistema de Gerenciamento de Biblioteca**, o conceito abordado ([ ] A rota `POST /emprestimos` valida se o livro está disponível antes de concluir?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: [ ] É possível listar todos os empréstimos realizados? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Sistema de Gerenciamento de Biblioteca**, o conceito abordado ([ ] É possível listar todos os empréstimos realizados?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 4: [ ] O código está organizado em pastas seguindo a Clean Architecture? **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Projeto Final: Sistema de Gerenciamento de Biblioteca**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 5: [ ] O banco de dados PostgreSQL sobe corretamente via `docker **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Sistema de Gerenciamento de Biblioteca**, o conceito abordado ([ ] O banco de dados PostgreSQL sobe corretamente via `docker) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 6: [ ] Existe ao menos um arquivo `_test.go` com testes passando? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Sistema de Gerenciamento de Biblioteca**, o conceito abordado ([ ] Existe ao menos um arquivo `_test.go` com testes passando?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 7: [ ] **Autenticação** **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Sistema de Gerenciamento de Biblioteca**, o conceito abordado ([ ] **Autenticação**) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 8: [ ] **Swagger** **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Sistema de Gerenciamento de Biblioteca**, o conceito abordado ([ ] **Swagger**) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 9: [ ] **Deploy** **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Sistema de Gerenciamento de Biblioteca**, o conceito abordado ([ ] **Deploy**) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Projetos
🚀 Projetos do Curso
Lista completa das 20 unidades de projetos organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
Projeto 01 - Cinto de Utilidades Backend 🛠️
Objetivo: Validar a instalação das ferramentas e testar a comunicação básica com uma API pública.
O Desafio
- Instale o Postman ou Insomnia.
- Realize uma requisição do tipo
GETpara a API pública do GitHub:https://api.github.com/users/github. - Analise a resposta (JSON). Identifique os campos
login,idepublic_repos. - Instale o Docker Desktop e rode o comando
docker run hello-worldno terminal para garantir que a virtualização está ativa. - Crie uma conta no GitHub (se não tiver) e instale o Git.
O que entregar?
- Print (screenshot) da resposta JSON no Postman/Insomnia.
- Print do terminal com a mensagem de sucesso do Docker "Hello from Docker!".
Projeto 02 - Modelagem de Fluxo de Gateway 🏗️
Objetivo: Entender o roteamento e a agregação de dados em um Gateway.
O Desafio
Imagine que você tem dois serviços:
- Serviço A (User): Retorna { "id": 1, "nome": "Ricardo" }
- Serviço B (Orders): Retorna [ { "id": 101, "valor": 50.0 }, { "id": 102, "valor": 30.0 } ]
- Desenhe um diagrama (pode ser no Mermaid ou papel) onde um API Gateway recebe uma chamada em
/dashboard/1e busca os dados nos dois serviços. - Escreva o JSON final que o Gateway entregaria para o Frontend, unindo as informações do usuário e seus pedidos.
- Pesquisa: Liste 3 ferramentas famosas de API Gateway de mercado (ex: Kong, AWS API Gateway, etc).
O que entregar?
- O diagrama de fluxo.
- O JSON de resposta agregada.
- A lista de ferramentas pesquisadas.
Projeto 03 - Contrato de API de Rede Social ⚡
Objetivo: Aplicar os conceitos de recursos, verbos e JSON na modelagem de uma rede social.
O Desafio
Você deve projetar a API para o recurso "Postagens" (Posts).
- Liste as 5 rotas principais (CRUD) para gerenciar postagens, indicando o Verbo, a URI e o Status Code de sucesso esperado.
- Crie um exemplo de JSON para uma postagem que contenha:
idautor_idconteúdo(texto)data_publicacaotags(lista de strings)
- Simulação de Erro: Qual seria a URI e o Verbo para dar um "Like" em uma postagem? Projete isso.
O que entregar?
- Tabela com as 5 rotas (Verbo, URI, Status).
- Bloco de código com o JSON de exemplo.
- Proposta da rota de "Like".
Projeto 04 - Criando o Primeiro Mock 🧱
Objetivo: Dominar o fluxo de documentação de contrato e simulação de servidor.
O Desafio
Você deve criar um servidor de Mock para uma API de Lista de Tarefas (ToDo).
- Use o Postman (Mock Server) ou o Mockoon para criar 2 rotas:
GET /tarefas: Deve retornar uma lista com pelo menos 3 tarefas.POST /tarefas: Deve aceitar uma nova tarefa e retornar201 Created.
- Documente os campos de uma tarefa (ex:
id,titulo,concluida). - Teste as rotas e garanta que o servidor responda corretamente no formato JSON.
O que entregar?
- Print (screenshot) do Swagger UI ou da tela do Mock Server rodando.
- O JSON de exemplo retornado pelo
GET /tarefas. - Print do teste da rota
POST /tarefascom sucesso.
Projeto 05 - Meu Primeiro Controller ⚙️
Objetivo: Praticar a criação de rotas e a captura de diferentes tipos de parâmetros.
O Desafio
Crie a estrutura de um Controller para um sistema de Gestão de Tarefas (To-Do). Você deve definir (em pseudocódigo ou na linguagem que preferir):
- Uma rota para listar todas as tarefas, permitindo um filtro opcional por
status(ex: concluída ou pendente). - Uma rota para buscar uma única tarefa pelo seu
id. - Uma rota para criar uma tarefa, recebendo
tituloedescricao. - Sinalize qual seria o Status Code de sucesso para cada uma das rotas acima.
O que avaliar?
- Uso correto de Path Params vs Query Params.
- Escolha dos verbos HTTP adequados.
- Padronização das respostas de sucesso.
Projeto 06 - Implementando a Lógica de Negócio 🧠
Objetivo: Aplicar a separação de camadas criando um Service para validação de dados.
O Desafio
Você deve criar o UsuarioService para um sistema de cadastro.
- Função
validarSenha(senha): Deve garantir que a senha tenha no mínimo 8 caracteres e contenha pelo menos um número. - Função
criarUsuario(dados):- Chama a validação de senha.
- Verifica se o e-mail já está sendo usado (simule um erro se estiver).
- Retorna o usuário criado (sem a senha!).
- Simule o Controller chamando esse Service e tratando o erro de "Senha Insegura" com um Status Code 400.
O que observar?
- O Service não deve usar objetos globais como
reqoures. - As mensagens de erro devem ser claras e informativas.
- Uso de DTOs (retornar objeto filtrado).
Projeto 07 - Modelagem de Banco de Dados 🗄️
Objetivo: Praticar a criação de esquemas relacionais e comandos SQL básicos.
O Desafio
Modele o banco de dados para um sistema de Aluguel de Filmes:
- Tabelas: Crie as tabelas
ClienteseFilmes. - Campos:
Clientesdeve terid,nomeeemail.Filmesdeve terid,tituloegenero.
- Relacionamento: Crie uma terceira tabela
Alugueisque ligue um cliente a um filme (incluindo adata_aluguel). - SQL: Escreva uma query que liste o nome do cliente e o título do filme para todos os aluguéis feitos hoje.
O que avaliar?
- Definição correta das Chaves Primárias.
- Uso de Chaves Estrangeiras para conectar as tabelas.
- Clareza na estrutura das colunas.
Projeto 08 - Schema de Validação Profissional ✅
Objetivo: Praticar a criação de regras de validação para garantir a integridade da API.
O Desafio
Crie o esquema de validação (em pseudocódigo ou usando uma biblioteca como Zod/Joi) para um Cadastro de Eventos:
- Campos Obrigatórios:
titulo(mín. 10 char),data(deve ser futura),capacidade_maxima(número positivo). - Campos Opcionais:
descricao(máx. 500 char),link_inscricao(formato de URL). - Sanitização: O título não deve conter espaços em branco sobrando no início ou no fim (trim).
- Simulação: Mostre qual seria a mensagem de erro retornada se o usuário enviasse uma capacidade negativa.
O que avaliar?
- Clareza e rigor das regras de validação.
- Escolha dos tipos de dados corretos.
- Mensagens de erro amigáveis ao desenvolvedor (DX).
Projeto 09 - Sistema de Login (Simulado) 🔐
Objetivo: Implementar a lógica de geração de tokens JWT para autenticação.
O Desafio
Crie uma API de simulação de login:
- Entrada: Receba um JSON com
emailesenha. - Validação: Verifique se a senha tem mais de 6 caracteres.
- JWT: Use uma biblioteca (ou pseudocódigo) para gerar um token que contenha o
iddo usuário e suapermissão(ex: 'aluno'). - Expiração: Configure o token para ser válido por apenas 24 horas.
- Resposta: Retorne para o cliente um objeto contendo o
tokene onomedo usuário.
O que avaliar?
- Tratamento correto de erro caso a senha seja curta.
- Estrutura limpa do Payload do JWT.
- Escolha de uma chave secreta segura (simulada).
Projeto 10 - Gerenciador de Permissões 🛡️
Objetivo: Implementar a lógica de proteção de rotas baseada em perfis de usuário.
O Desafio
Crie a estrutura de autorização para um Sistema de RH:
- Roles: Defina três tipos:
ADMIN,GESTOReFUNCIONARIO. - Regras:
- Todos podem ver o próprio perfil (
GET /me). - Apenas
GESTOReADMINpodem ver a lista de salários (GET /salarios). - Apenas
ADMINpode deletar um registro (DELETE /colaboradores/:id).
- Todos podem ver o próprio perfil (
- Middleware: Desenhe (em desenho técnico ou código) como seria o "fluxo da cancela" (Authentication Middleware -> Authorization Middleware).
O que avaliar?
- Separação clara entre quem é você e o que você pode fazer.
- Uso correto dos Status Codes em caso de bloqueio.
- Lógica de hierarquia (Admin pode tudo).
Projeto 11 - Blindagem de API 🏗️
Objetivo: Implementar camadas avançadas de segurança e renovação de tokens.
O Desafio
Fortaleça sua API de login:
- Helmet: Instale e configure o Helmet para proteger os Headers.
- CORS: Restrinja o acesso à API para que apenas o domínio
http://localhost:3000possa consultá-la. - Refresh Token: Implemente uma rota
/refreshque receba um refresh token, valide-o no banco (ou lista em memória) e gere um novoaccessToken. - Rate Limit: Adicione uma trava para que ninguém possa tentar logar mais de 5 vezes em 1 minuto.
O que avaliar?
- Configuração correta das origens no CORS.
- Lógica de expiração do Refresh Token (ele deve durar muito mais que o Access Token).
- Verificação se o Helmet está realmente escondendo o header
X-Powered-By.
Projeto 12 - Primeiro App React ⚛️
Objetivo: Criar e organizar componentes básicos usando React e Vite.
O Desafio
Crie uma página de Perfil de Usuário:
- Componente
FotoPerfil: Exibe uma imagem circular. - Componente
InfoUsuario: Recebenomeebiovia props e exibe na tela. - Componente
BotaoSeguir: Um botão simples que, por enquanto, apenas exibe um alerta ao ser clicado. - Layout: Organize esses componentes dentro do
App.jsxusando CSS simples para centralizar o conteúdo.
O que avaliar?
- Separação correta dos componentes em arquivos diferentes (ou funções separadas).
- Uso correto de Props para personalizar o nome do usuário.
- Sintaxe JSX correta (tags fechadas, className, etc).
Projeto 13 - Lista Dinâmica de Contatos 📱
Objetivo: Aplicar o uso de useState e gerenciamento de listas.
O Desafio
Crie um mini-gerenciador de contatos:
- Inputs: Dois campos de texto (Nome e Telefone).
- Botão Adicionar: Quando clicado, deve validar se os campos estão preenchidos e adicionar o contato em um Estado de Array.
- Lista: Exiba todos os contatos adicionados abaixo do formulário.
- Botão Limpar: Um botão que limpa toda a lista de contatos.
O que avaliar?
- Uso correto do
useStatepara os inputs e para a lista. - Uso do
.map()para renderizar a lista de contatos. - Limpeza dos campos de input após a adição com sucesso.
Projeto 14 - Buscador de Repositórios 🔍
Objetivo: Consumir uma API real e gerenciar estados de carregamento.
O Desafio
Crie um app que busca repositórios do GitHub de um usuário:
- Input: Campo para digitar o nome do usuário do GitHub.
- Botão Buscar: Ao clicar, deve disparar a busca.
- Loading: Enquanto a API não responde, deve aparecer o texto "Buscando repositórios...".
- Lista: Exiba o nome de todos os repositórios públicos encontrados.
- Erro: Se o usuário não existir, exiba "Erro: Usuário não encontrado".
O que avaliar?
- Uso do
useEffectpara carregar dados (pode ser ao carregar a página ou via clique). - Tratamento correto dos estados:
null,loading,dataeerror. - Renderização limpa usando
.map().
Projeto 15 - Sistema de Multi-Páginas 🚦
Objetivo: Implementar a navegação completa em uma SPA.
O Desafio
Transforme seu app de repositórios ou contatos em um site completo com 3 páginas:
- Home (/): Uma página de boas-vindas com links para as outras seções.
- Dashboard (/app): Onde fica a funcionalidade principal (ex: a busca de repositórios).
- Sobre (/sobre): Uma página contando quem criou o projeto.
- 404: Uma página personalizada para links quebrados.
Requisito Extra (Parâmetro)
Crie uma página de Perfil de Repositório (/repo/:id) que deve ser aberta ao clicar em um item da lista. Essa página só precisa exibir o ID que foi clicado por enquanto.
O que avaliar?
- Configuração correta do
BrowserRouternomain.jsxouApp.jsx. - Uso exclusivo de
<Link>para navegação em menus. - Funcionamento correto dos parâmetros de URL com
useParams.
Projeto 16 - App Final Full-Stack Integrador 🏆
Objetivo: O "TCC (Trabalho de Conclusão de Curso)" do desenvolvedor Full-Stack.
O Tema
Escolha um tema que resolva um problema real integrando o que você construiu no Backend (Módulos 1-3) com o que aprendeu no Frontend (Módulo 4).
Requisitos Mínimos
- Backend (Express): Uso obrigatório de rotas protegidas por JWT e validação de dados.
- Frontend (React): Componentização clara, uso de Hooks (
useState,useEffect) e navegação comReact Router. - Integração: O Frontend deve consumir a sua própria API de forma assíncrona.
- UX/UI: Interface amigável, com tratamento de estados de carregamento e erro.
- Segurança: Configuração correta de CORS e Headers de segurança (Helmet).
Documentação ✨
Seu repositório no GitHub deve ter um README.md impecável, com imagens (prints) da aplicação, explicação das tecnologias usadas e instruções claras de como rodar o servidor e o cliente. Este projeto será o seu maior cartão de visitas!
Boa sorte e bom código! 🚀🚀🚀
Quizzes
🧠 Quizzes de Fixação
Lista completa das 20 unidades de quizzes organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
🧠 Quiz 01 – Introdução ao Go e Ecossistema 🐹
- Qual é o conceito fundamental e objetivo principal de Introdução ao Go e Ecossistema 🐹?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Introdução ao Go e Ecossistema 🐹?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Introdução ao Go e Ecossistema 🐹, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Introdução ao Go e Ecossistema 🐹?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Introdução ao Go e Ecossistema 🐹 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Introdução ao Go e Ecossistema 🐹, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Introdução ao Go e Ecossistema 🐹?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Introdução ao Go e Ecossistema 🐹 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Introdução ao Go e Ecossistema 🐹 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Introdução ao Go e Ecossistema 🐹 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 02 – Fundamentos da Linguagem 🧱
- Qual é o conceito fundamental e objetivo principal de Fundamentos da Linguagem 🧱?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Fundamentos da Linguagem 🧱?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Fundamentos da Linguagem 🧱, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Fundamentos da Linguagem 🧱?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Fundamentos da Linguagem 🧱 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Fundamentos da Linguagem 🧱, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Fundamentos da Linguagem 🧱?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Fundamentos da Linguagem 🧱 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Fundamentos da Linguagem 🧱 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Fundamentos da Linguagem 🧱 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 03 – Funções e Organização do Código 🧩
- Qual é o conceito fundamental e objetivo principal de Funções e Organização do Código 🧩?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Funções e Organização do Código 🧩?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Funções e Organização do Código 🧩, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Funções e Organização do Código 🧩?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Funções e Organização do Código 🧩 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Funções e Organização do Código 🧩, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Funções e Organização do Código 🧩?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Funções e Organização do Código 🧩 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Funções e Organização do Código 🧩 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Funções e Organização do Código 🧩 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 04 – Estruturas de Dados Avançadas 🗄️
- Qual é o conceito fundamental e objetivo principal de Estruturas de Dados Avançadas 🗄️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Estruturas de Dados Avançadas 🗄️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Estruturas de Dados Avançadas 🗄️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Estruturas de Dados Avançadas 🗄️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Estruturas de Dados Avançadas 🗄️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Estruturas de Dados Avançadas 🗄️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Estruturas de Dados Avançadas 🗄️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Estruturas de Dados Avançadas 🗄️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Estruturas de Dados Avançadas 🗄️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Estruturas de Dados Avançadas 🗄️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 05 – Interfaces e Programação Orientada a Composição 🧩
- Qual é o conceito fundamental e objetivo principal de Interfaces e Programação Orientada a Composição 🧩?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Interfaces e Programação Orientada a Composição 🧩?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Interfaces e Programação Orientada a Composição 🧩, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Interfaces e Programação Orientada a Composição 🧩?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Interfaces e Programação Orientada a Composição 🧩 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Interfaces e Programação Orientada a Composição 🧩, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Interfaces e Programação Orientada a Composição 🧩?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Interfaces e Programação Orientada a Composição 🧩 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Interfaces e Programação Orientada a Composição 🧩 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Interfaces e Programação Orientada a Composição 🧩 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 06 – Tratamento de Erros ⚠️
- Qual é o conceito fundamental e objetivo principal de Tratamento de Erros ⚠️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Tratamento de Erros ⚠️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Tratamento de Erros ⚠️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Tratamento de Erros ⚠️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Tratamento de Erros ⚠️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Tratamento de Erros ⚠️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Tratamento de Erros ⚠️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Tratamento de Erros ⚠️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Tratamento de Erros ⚠️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Tratamento de Erros ⚠️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 07 – Manipulação de Arquivos e JSON 📁
- Qual é o conceito fundamental e objetivo principal de Manipulação de Arquivos e JSON 📁?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Manipulação de Arquivos e JSON 📁?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Manipulação de Arquivos e JSON 📁, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Manipulação de Arquivos e JSON 📁?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Manipulação de Arquivos e JSON 📁 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Manipulação de Arquivos e JSON 📁, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Manipulação de Arquivos e JSON 📁?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Manipulação de Arquivos e JSON 📁 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Manipulação de Arquivos e JSON 📁 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Manipulação de Arquivos e JSON 📁 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 08 – Concorrência em Go ⚡
- Qual é o conceito fundamental e objetivo principal de Concorrência em Go ⚡?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Concorrência em Go ⚡?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Concorrência em Go ⚡, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Concorrência em Go ⚡?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Concorrência em Go ⚡ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Concorrência em Go ⚡, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Concorrência em Go ⚡?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Concorrência em Go ⚡ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Concorrência em Go ⚡ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Concorrência em Go ⚡ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 09 – Programação Web com net/http 🌐
- Qual é o conceito fundamental e objetivo principal de Programação Web com net/http 🌐?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Programação Web com net/http 🌐?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Programação Web com net/http 🌐, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Programação Web com net/http 🌐?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Programação Web com net/http 🌐 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Programação Web com net/http 🌐, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Programação Web com net/http 🌐?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Programação Web com net/http 🌐 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Programação Web com net/http 🌐 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Programação Web com net/http 🌐 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 10 – Construindo APIs REST 🏗️
- Qual é o conceito fundamental e objetivo principal de Construindo APIs REST 🏗️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Construindo APIs REST 🏗️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Construindo APIs REST 🏗️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Construindo APIs REST 🏗️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Construindo APIs REST 🏗️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Construindo APIs REST 🏗️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Construindo APIs REST 🏗️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Construindo APIs REST 🏗️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Construindo APIs REST 🏗️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Construindo APIs REST 🏗️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 11 – Framework Web Gin 🚀
- Qual é o conceito fundamental e objetivo principal de Framework Web Gin 🚀?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Framework Web Gin 🚀?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Framework Web Gin 🚀, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Framework Web Gin 🚀?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Framework Web Gin 🚀 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Framework Web Gin 🚀, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Framework Web Gin 🚀?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Framework Web Gin 🚀 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Framework Web Gin 🚀 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Framework Web Gin 🚀 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 12 – Banco de Dados (GORM) 💾
- Qual é o conceito fundamental e objetivo principal de Banco de Dados (GORM) 💾?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Banco de Dados (GORM) 💾?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Banco de Dados (GORM) 💾, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Banco de Dados (GORM) 💾?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Banco de Dados (GORM) 💾 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Banco de Dados (GORM) 💾, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Banco de Dados (GORM) 💾?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Banco de Dados (GORM) 💾 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Banco de Dados (GORM) 💾 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Banco de Dados (GORM) 💾 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 13 – Testes em Go ✅
- Qual é o conceito fundamental e objetivo principal de Testes em Go ✅?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Testes em Go ✅?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Testes em Go ✅, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Testes em Go ✅?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Testes em Go ✅ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Testes em Go ✅, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Testes em Go ✅?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Testes em Go ✅ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Testes em Go ✅ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Testes em Go ✅ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 14 – Arquitetura e Boas Práticas 🏗️
- Qual é o conceito fundamental e objetivo principal de Arquitetura e Boas Práticas 🏗️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Arquitetura e Boas Práticas 🏗️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Arquitetura e Boas Práticas 🏗️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Arquitetura e Boas Práticas 🏗️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Arquitetura e Boas Práticas 🏗️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Arquitetura e Boas Práticas 🏗️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Arquitetura e Boas Práticas 🏗️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Arquitetura e Boas Práticas 🏗️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Arquitetura e Boas Práticas 🏗️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Arquitetura e Boas Práticas 🏗️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 15 – Docker e Deploy 🐳
- Qual é o conceito fundamental e objetivo principal de Docker e Deploy 🐳?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Docker e Deploy 🐳?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Docker e Deploy 🐳, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Docker e Deploy 🐳?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Docker e Deploy 🐳 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Docker e Deploy 🐳, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Docker e Deploy 🐳?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Docker e Deploy 🐳 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Docker e Deploy 🐳 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Docker e Deploy 🐳 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 16 – Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆
- Qual é o conceito fundamental e objetivo principal de Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Projeto Final: Sistema de Gerenciamento de Biblioteca 🏆 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 17 – Concorrência Extrema com Goroutines e Channels 🚀
- Qual o propósito principal de Concorrência Extrema com Goroutines e Channels 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Concorrência Extrema com Goroutines e Channels 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Concorrência Extrema com Goroutines e Channels 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Concorrência Extrema com Goroutines e Channels 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Concorrência Extrema com Goroutines e Channels 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Concorrência Extrema com Goroutines e Channels 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Concorrência Extrema com Goroutines e Channels 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Concorrência Extrema com Goroutines e Channels 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Concorrência Extrema com Goroutines e Channels 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Concorrência Extrema com Goroutines e Channels 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
🧠 Quiz 18 – Construção de APIs REST com Gin e GORM 🚀
- Qual o propósito principal de Construção de APIs REST com Gin e GORM 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Construção de APIs REST com Gin e GORM 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Construção de APIs REST com Gin e GORM 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Construção de APIs REST com Gin e GORM 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Construção de APIs REST com Gin e GORM 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Construção de APIs REST com Gin e GORM 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Construção de APIs REST com Gin e GORM 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Construção de APIs REST com Gin e GORM 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Construção de APIs REST com Gin e GORM 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Construção de APIs REST com Gin e GORM 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
🧠 Quiz 19 – Testes de Benchmark e Perfilamento de Memória (pprof) 🚀
- Qual o propósito principal de Testes de Benchmark e Perfilamento de Memória (pprof) 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Testes de Benchmark e Perfilamento de Memória (pprof) 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Testes de Benchmark e Perfilamento de Memória (pprof) 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Testes de Benchmark e Perfilamento de Memória (pprof) 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Testes de Benchmark e Perfilamento de Memória (pprof) 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Testes de Benchmark e Perfilamento de Memória (pprof) 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Testes de Benchmark e Perfilamento de Memória (pprof) 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Testes de Benchmark e Perfilamento de Memória (pprof) 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Testes de Benchmark e Perfilamento de Memória (pprof) 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Testes de Benchmark e Perfilamento de Memória (pprof) 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
🧠 Quiz 20 – Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀
- Qual o propósito principal de Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Projeto Capstone: Microsserviço Golang de Baixíssima Latência 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
Slides
Configuração
Ambientes de Desenvolvimento e Configuração 🛠️
Guias oficiais passo a passo para configurar suas ferramentas profissionais de desenvolvimento para Backend com Go (Golang).
-
Instalação do Go Toolchain (Go 1.22+) e GOPATH --- Instalação oficial do compilador Go, configuração de variáveis e inicialização com go mod.
-
VS Code com Extensão Oficial Go e gopls --- Ambiente com IntelliSense rápido, formatação automática (go fmt) e navegação de tipos.
-
Live-Reload com Air para APIs Web --- Configuração da ferramenta Air para recarregar o servidor Go automaticamente ao salvar arquivos.
-
Depurador Delve (dlv) e Linter golangci-lint --- Depuração passo a passo com breakpoints e análise estática de conformidade idiomática.
Setup 01: Instalação do Go Toolchain (Go 1.22+) e GOPATH 🛠️
Objetivo da Configuração
Objetivo: Instalação oficial do compilador Go, configuração de variáveis e inicialização com go mod.
1. Pré-Requisitos e Visão Geral
A configuração correta deste ambiente é fundamental para o desenvolvimento eficiente e sem atritos ao longo do curso de Backend com Go (Golang).
2. Passo a Passo de Instalação e Configuração
📥 Passo 1: Download e Instalação
Siga as instruções oficiais correspondentes ao seu sistema operacional (Windows, Linux ou macOS):
- Baixe o pacote oficial da ferramenta diretamente do site do mantenedor.
- Execute o assistente de instalação habilitando a opção de adicionar os binários à variável de ambiente PATH.
⚙️ Passo 2: Verificação no Terminal
Abra uma nova janela de terminal e valide se o comando está acessível:
💻 Passo 3: Configuração no Editor / IDE
- Instale as extensões recomendadas para obter destaque de sintaxe, autocompletar e linters integrados.
- Reinicie o editor para carregar os novos caminhos de execução.
3. Teste Rápido de Validação
Crie um arquivo de teste simples para comprovar que o compilador, interpretador ou ferramenta está operando com 100% de sucesso.
🎯 Próximos Passos
Com o ambiente configurado, você está pronto para iniciar as aulas práticas e desenvolver os projetos da disciplina.
Setup 02: VS Code com Extensão Oficial Go e gopls 🛠️
Objetivo da Configuração
Objetivo: Ambiente com IntelliSense rápido, formatação automática (go fmt) e navegação de tipos.
1. Pré-Requisitos e Visão Geral
A configuração correta deste ambiente é fundamental para o desenvolvimento eficiente e sem atritos ao longo do curso de Backend com Go (Golang).
2. Passo a Passo de Instalação e Configuração
📥 Passo 1: Download e Instalação
Siga as instruções oficiais correspondentes ao seu sistema operacional (Windows, Linux ou macOS):
- Baixe o pacote oficial da ferramenta diretamente do site do mantenedor.
- Execute o assistente de instalação habilitando a opção de adicionar os binários à variável de ambiente PATH.
⚙️ Passo 2: Verificação no Terminal
Abra uma nova janela de terminal e valide se o comando está acessível:
💻 Passo 3: Configuração no Editor / IDE
- Instale as extensões recomendadas para obter destaque de sintaxe, autocompletar e linters integrados.
- Reinicie o editor para carregar os novos caminhos de execução.
3. Teste Rápido de Validação
Crie um arquivo de teste simples para comprovar que o compilador, interpretador ou ferramenta está operando com 100% de sucesso.
🎯 Próximos Passos
Com o ambiente configurado, você está pronto para iniciar as aulas práticas e desenvolver os projetos da disciplina.
Setup 03: Live-Reload com Air para APIs Web 🛠️
Objetivo da Configuração
Objetivo: Configuração da ferramenta Air para recarregar o servidor Go automaticamente ao salvar arquivos.
1. Pré-Requisitos e Visão Geral
A configuração correta deste ambiente é fundamental para o desenvolvimento eficiente e sem atritos ao longo do curso de Backend com Go (Golang).
2. Passo a Passo de Instalação e Configuração
📥 Passo 1: Download e Instalação
Siga as instruções oficiais correspondentes ao seu sistema operacional (Windows, Linux ou macOS):
- Baixe o pacote oficial da ferramenta diretamente do site do mantenedor.
- Execute o assistente de instalação habilitando a opção de adicionar os binários à variável de ambiente PATH.
⚙️ Passo 2: Verificação no Terminal
Abra uma nova janela de terminal e valide se o comando está acessível:
💻 Passo 3: Configuração no Editor / IDE
- Instale as extensões recomendadas para obter destaque de sintaxe, autocompletar e linters integrados.
- Reinicie o editor para carregar os novos caminhos de execução.
3. Teste Rápido de Validação
Crie um arquivo de teste simples para comprovar que o compilador, interpretador ou ferramenta está operando com 100% de sucesso.
🎯 Próximos Passos
Com o ambiente configurado, você está pronto para iniciar as aulas práticas e desenvolver os projetos da disciplina.
Setup 04: Depurador Delve (dlv) e Linter golangci-lint 🛠️
Objetivo da Configuração
Objetivo: Depuração passo a passo com breakpoints e análise estática de conformidade idiomática.
1. Pré-Requisitos e Visão Geral
A configuração correta deste ambiente é fundamental para o desenvolvimento eficiente e sem atritos ao longo do curso de Backend com Go (Golang).
2. Passo a Passo de Instalação e Configuração
📥 Passo 1: Download e Instalação
Siga as instruções oficiais correspondentes ao seu sistema operacional (Windows, Linux ou macOS):
- Baixe o pacote oficial da ferramenta diretamente do site do mantenedor.
- Execute o assistente de instalação habilitando a opção de adicionar os binários à variável de ambiente PATH.
⚙️ Passo 2: Verificação no Terminal
Abra uma nova janela de terminal e valide se o comando está acessível:
💻 Passo 3: Configuração no Editor / IDE
- Instale as extensões recomendadas para obter destaque de sintaxe, autocompletar e linters integrados.
- Reinicie o editor para carregar os novos caminhos de execução.
3. Teste Rápido de Validação
Crie um arquivo de teste simples para comprovar que o compilador, interpretador ou ferramenta está operando com 100% de sucesso.
🎯 Próximos Passos
Com o ambiente configurado, você está pronto para iniciar as aulas práticas e desenvolver os projetos da disciplina.
Sobre
Sobre o Curso
🎓 APIs e Microsserviços Profissionais
Este curso foi projetado para capacitar desenvolvedores na criação de arquiteturas distribuídas modernas, focando na integração entre backends escaláveis e frontends dinâmicos do tipo SPA.
🎯 Objetivos do Curso
-
Arquitetura Distribuída --- Compreender a transição de monólitos para microsserviços e a importância da comunicação eficiente entre serviços.
-
Domínio de APIs REST --- Dominar a modelagem, implementação e documentação de APIs seguindo as melhores práticas do mercado.
-
Segurança Avançada --- Implementar sistemas de autenticação e autorização robustos utilizando JWT e controle de acesso baseado em perfis.
-
Frontend Moderno (SPA) --- Desenvolver interfaces ricas e reativas, conectando-as perfeitamente ao ecossistema de APIs backend.
📚 O Que Você Vai Aprender
Módulo 1 – Serviços e Microsserviços
- Conceitos de Microsserviços vs Monólitos
- Arquitetura e API Gateways
- Modelagem de APIs RESTful
- Documentação com Swagger e Mocks
Módulo 2 – Manipulação de Dados
- Implementação de Endpoints (Backend)
- Persistência com ORM e SQL
- Testes Unitários com Mocks
- Testes Integrados e Deploy
Módulo 3 – Autenticação e Segurança
- Estratégias Web (Cookies vs Tokens)
- Implementação de JWT
- Criptografia e Proteção de Rotas
- Autorização RBAC (Perfis)
Módulo 4 – Aplicações Web SPA
- Conceitos de SPA e Renderização
- Componentização e Templates
- Gerenciamento de Estados e Eventos
- Roteamento e Projeto Integrador
🛠️ Metodologia
Foco 100% prático e orientado a projetos. Cada módulo culmina em uma etapa funcional de um sistema completo, garantindo que ao final do curso você tenha um portfólio robusto de arquitetura fullstack.
Pronto para dominar o Backend? Começar Agora
Roadmap do Projeto: APIs e Microsserviços 🚀
Este documento rastreia a evolução do curso.
✅ Fase 1: Planejamento (Concluído)
- Definição Syllabus (16 Aulas)
- Estrutura Backend-first com integração SPA
- Configuração MkDocs Material
✅ Fase 2: Conteúdo Base (Concluído)
- Criação das 16 Aulas (Markdown)
- Criação dos 16 Quizzes (HTML)
- Criação dos 16 Conjuntos de Exercícios
- Criação dos 16 Slides (RevealJS)
✅ Fase 3: Projetos e UX (Concluído)
- Definição dos 16 Projetos práticos
- Documentação Swagger/OpenAPI integrada
- Diagramação Mermaid de arquitetura de serviços
🚀 Fase 4: Lançamento e Manutenção
- Deploy GitHub Pages (GitHub Actions)
- Atualização para novas versões de frameworks (Spring/Node/React)
- Inclusão de exemplos de mensageria (RabbitMQ/Kafka)
Status Atual: Finalizado / Manutenção Última Atualização: 19/02/2026
Materiais Complementares 📚
Bem-vindo à seção de materiais complementares do curso de APIs e Microsserviços. Aqui você encontra recursos adicionais para apoiar seus estudos e aprofundar seu conhecimento técnico.
-
- Acompanhe o conteúdo teórico com slides dinâmicos.
-
- Pratique a implementação de microsserviços e rotas REST.
-
- Valide seu aprendizado com testes rápidos por módulo.
-
- Construa um ecossistema completo para seu portfólio.
-
- Guias de instalação (Docker, IDEs, Postman).
🏷️ Índice de Tags Didáticas
Navegue pelas aulas, exercícios e projetos do curso organizados por temas, tecnologias e conceitos fundamentais:
tags.md:145-167/name
Versão para Impressão
Esta página foi gerada automaticamente para impressão.