Resolva os exercícios na ordem — cada nível aprofunda o anterior. Tente resolver sem consultar a solução.
Nível 1 — Aquecimento
Exercício 1: FizzBuzz
Escreva um programa que imprime números de 1 a 100, mas:
- Se divisível por 3, imprime "Fizz"
- Se divisível por 5, imprime "Buzz"
- Se divisível por ambos, imprime "FizzBuzz"
Conceitos praticados: loops, condicionais, operador %.
Exercício 2: Inversor de palavras
Crie uma função que recebe uma string e retorna ela com a ordem das palavras invertida.
Entrada: "Eu amo Go"
Saída: "Go amo Eu"
Conceitos praticados: strings, slices, strings.Split, strings.Join.
Nível 2 — Intermediário
Exercício 3: Contador de frequências
Faça uma função que recebe um slice de strings e retorna um map[string]int com a contagem de cada palavra (case-insensitive).
CountFrequencies([]string{"go", "Go", "java", "GO"})
// Retorna: map[go:3 java:1]Conceitos praticados: maps, normalização de strings, strings.ToLower.
Exercício 4: Calculadora com interface
Crie uma interface Operation com método Calculate(a, b float64) float64. Implemente structs Sum, Subtraction, Multiplication, Division. Faça uma função que recebe um slice de Operation e aplica todas em ordem sobre um valor inicial.
Conceitos praticados: interfaces, polimorfismo, structs.
Nível 3 — Avançado
Exercício 5: Web crawler concorrente
Faça um programa que recebe uma lista de URLs e, com no máximo 5 goroutines simultâneas, baixa cada uma e mede quanto tempo demorou. No final, imprime um resumo ordenado por tempo.
Conceitos praticados: goroutines, channels, sync.WaitGroup, worker pool, context.WithTimeout.