🧩 Exercícios: Interfaces Implícitas, Polimorfismo Estrutural e any
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 11.1 — Implementação Implícita de Interface (Duck Typing)
Contexto: Implementação Implícita de Interface (Duck Typing) no contexto de Interfaces Implícitas, Polimorfismo Estrutural e any.
Requisitos de Execução:
- Criar interface
Notificadore implementar métodoNotificar()em structs distintas sem palavra-chave implements.
Resultado Esperado
Interface satisfeita implicitamente pelas estruturas concretas.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_1_SeuNome - Envie na tarefa:
Atividade Cap 11 - Interfaces Implícitas, Polimorfismo Estrutural e any
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
type Notificador interface { Enviar(msg string) }
type EmailNotificador struct{}
func (EmailNotificador) Enviar(msg string) { fmt.Printf("Email enviado: %s\n", msg) }
func main() {
var n Notificador = EmailNotificador{}
n.Enviar("Servidor reiniciado.")
}
🔍 Nível 2: Prática
Problema 11.2 — Interface Vazia any (interface{}) e Type Assertion segura
Contexto: Interface Vazia any (interface{}) e Type Assertion segura no contexto de Interfaces Implícitas, Polimorfismo Estrutural e any.
Requisitos de Execução:
- Desempacotar valor genérico com asserção segura
val, ok := x.(string).
Resultado Esperado
Asserção de tipos executada com verificação booleana defensiva.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_2_SeuNome - Envie na tarefa:
Atividade Cap 11 - Interfaces Implícitas, Polimorfismo Estrutural e any
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func processar(dado any) {
if s, ok := dado.(string); ok {
fmt.Println("String identificada:", s)
} else {
fmt.Println("Outro tipo de dado recebido.")
}
}
func main() {
processar("GoLang")
processar(42)
}
⚡ Nível 3: Integração
Problema 11.3 — Composição de Interfaces (Interface Embedding)
Contexto: Composição de Interfaces (Interface Embedding) no contexto de Interfaces Implícitas, Polimorfismo Estrutural e any.
Requisitos de Execução:
- Compor interface
ReadWriteClosera partir deio.Reader,io.Writereio.Closer.
Resultado Esperado
Composição de contratos de interface executada com modularidade.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_3_SeuNome - Envie na tarefa:
Atividade Cap 11 - Interfaces Implícitas, Polimorfismo Estrutural e any
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
type Leitor interface { Ler() string }
type Escritor interface { Escrever(s string) }
type LeitorEscritor interface { Leitor; Escritor }
type ConsoleStream struct{}
func (ConsoleStream) Ler() string { return "dados" }
func (ConsoleStream) Escrever(s string) { fmt.Println("Escrevendo:", s) }
func main() {
var rw LeitorEscritor = ConsoleStream{}
rw.Escrever(rw.Ler())
}
🏆 Nível 4: Desafio Corporativo
Problema 11.4 — Garantia de Conformidade em Tempo de Compilação com var _ Interface = (*Tipo)(nil)
Contexto: Garantia de Conformidade em Tempo de Compilação com var _ Interface = (*Tipo)(nil) no contexto de Interfaces Implícitas, Polimorfismo Estrutural e any.
Requisitos de Execução:
- Adicionar asserção estática no arquivo garantindo que
TiposatisfaçaInterfacesob risco de erro de compilação.
Resultado Esperado
Conformidade de interface garantida estaticamente em tempo de compilação.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_4_SeuNome - Envie na tarefa:
Atividade Cap 11 - Interfaces Implícitas, Polimorfismo Estrutural e any
🔑 Gabarito de Código & Solução Comentada
package main
type Repositorio interface { BuscarPorId(id int) string }
type MemoriaRepo struct{}
func (*MemoriaRepo) BuscarPorId(id int) string { return "Item" }
// Verificacao estatica de interface
var _ Repositorio = (*MemoriaRepo)(nil)
func main() {}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |