🧩 Exercícios: Funções, Retornos Múltiplos, Variádicas e Closures
Spec Sistemas Com Go • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 08.1 — Função com Retornos Múltiplos Nomeados
Contexto: Função com Retornos Múltiplos Nomeados no contexto de Funções, Retornos Múltiplos, Variádicas e Closures.
Requisitos de Execução:
- Criar função
divisao(dividendo, divisor int) (quociente, resto int, err error).
Resultado Esperado
Retornos múltiplos nomeados retornados com tratamento de erro.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_1_SeuNome - Envie na tarefa:
Atividade Cap 08 - Funções, Retornos Múltiplos, Variádicas e Closures
🔑 Gabarito de Código & Solução Comentada
package main
import (
"errors"
"fmt"
)
func dividir(a, b int) (quo, resto int, err error) {
if b == 0 {
return 0, 0, errors.New("divisao por zero")
}
return a / b, a % b, nil
}
func main() {
q, r, _ := dividir(17, 5)
fmt.Printf("17 / 5 = %d (Resto: %d)\n", q, r)
}
🔍 Nível 2: Prática
Problema 08.2 — Funções Variádicas com Operador Ellipsis (…T)
Contexto: Funções Variádicas com Operador Ellipsis (…T) no contexto de Funções, Retornos Múltiplos, Variádicas e Closures.
Requisitos de Execução:
- Criar função
somar(nums ...int) intque receba quantidade arbitrária de inteiros.
Resultado Esperado
Função variádica somando lista dinâmica de argumentos.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_2_SeuNome - Envie na tarefa:
Atividade Cap 08 - Funções, Retornos Múltiplos, Variádicas e Closures
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func somar(numeros ...int) int {
total := 0
for _, n := range numeros {
total += n
}
return total
}
func main() {
fmt.Println("Soma:", somar(10, 20, 30, 40))
}
⚡ Nível 3: Integração
Problema 08.3 — Closures e Funções Anônimas com Captura de Escopo
Contexto: Closures e Funções Anônimas com Captura de Escopo no contexto de Funções, Retornos Múltiplos, Variádicas e Closures.
Requisitos de Execução:
- Criar função geradora de contadores
gerarContador() func() intpreservando estado local.
Resultado Esperado
Closure mantendo estado privado entre invocações sucessivas.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_3_SeuNome - Envie na tarefa:
Atividade Cap 08 - Funções, Retornos Múltiplos, Variádicas e Closures
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func criarContador() func() int {
c := 0
return func() int {
c++
return c
}
}
func main() {
cont := criarContador()
fmt.Println(cont(), cont(), cont()) // 1, 2, 3
}
🏆 Nível 4: Desafio Corporativo
Problema 08.4 — Padrão Functional Options para Configuração de Serviços
Contexto: Padrão Functional Options para Configuração de Serviços no contexto de Funções, Retornos Múltiplos, Variádicas e Closures.
Requisitos de Execução:
- Implementar
type Option func(*Servidor)permitindo configuração modular e extensível.
Resultado Esperado
Servidor instanciado utilizando o padrão idiomático Functional Options.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_4_SeuNome - Envie na tarefa:
Atividade Cap 08 - Funções, Retornos Múltiplos, Variádicas e Closures
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
type Servidor struct { porta int; host string }
type Option func(*Servidor)
func ComPorta(p int) Option { return func(s *Servidor) { s.porta = p } }
func NovoServidor(opts ...Option) *Servidor {
srv := &Servidor{porta: 8080, host: "localhost"}
for _, opt := range opts { opt(srv) }
return srv
}
func main() {
srv := NovoServidor(ComPorta(9000))
fmt.Printf("Servidor rodando na porta: %d\n", srv.porta)
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |