Spec Sistemas Com Go • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 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:

  1. Criar interface Notificador e implementar método Notificar() em structs distintas sem palavra-chave implements.

Resultado Esperado

Interface satisfeita implicitamente pelas estruturas concretas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_1_SeuNome
  2. 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:

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

  1. Salve o arquivo como: Atividade_11_2_SeuNome
  2. 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:

  1. Compor interface ReadWriteCloser a partir de io.Reader, io.Writer e io.Closer.

Resultado Esperado

Composição de contratos de interface executada com modularidade.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_3_SeuNome
  2. 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:

  1. Adicionar asserção estática no arquivo garantindo que Tipo satisfaça Interface sob risco de erro de compilação.

Resultado Esperado

Conformidade de interface garantida estaticamente em tempo de compilação.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_4_SeuNome
  2. 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