M01·07Exercícios Práticos

CAPÍTULO 07

Exercícios Práticos

Cinco desafios em ordem crescente de dificuldade para fixar goroutines, channels, interfaces e worker pools.

Por Thiago Souza4 min de leituraAtualizado em 2026-05

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).

go
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.

Use o exemplo do worker pool concorrente do capítulo anterior como base para o exercício 5.