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


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 10.1 — Declaração de Struct e Métodos com Value Receiver vs Pointer Receiver

Contexto: Declaração de Struct e Métodos com Value Receiver vs Pointer Receiver no contexto de Estruturas (Structs), Receiver Functions e Composição (Embedding).

Requisitos de Execução:

  1. Criar struct ContaBancaria com método de leitura (c Conta) Saldo() e de escrita (c *Conta) Depositar().

Resultado Esperado

Métodos com Value e Pointer Receivers manipulando dados de struct.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_10_1_SeuNome
  2. Envie na tarefa: Atividade Cap 10 - Estruturas (Structs), Receiver Functions e Composição (Embedding)
🔑 Gabarito de Código & Solução Comentada
package main

import "fmt"

type Conta struct { saldo float64 }

func (c Conta) ObterSaldo() float64 { return c.saldo }
func (c *Conta) Depositar(v float64) { c.saldo += v }

func main() {
    c := Conta{saldo: 100.0}
    c.Depositar(50.0)
    fmt.Printf("Saldo: R$ %.2f\n", c.ObterSaldo())
}

🔍 Nível 2: Prática

Problema 10.2 — Composição de Estruturas (Struct Embedding) como Alternativa à Herança

Contexto: Composição de Estruturas (Struct Embedding) como Alternativa à Herança no contexto de Estruturas (Structs), Receiver Functions e Composição (Embedding).

Requisitos de Execução:

  1. Embutir struct Pessoa dentro de Funcionario herdando campos e métodos diretamente.

Resultado Esperado

Composição de tipos executada com promoção automática de campos embutidos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_10_2_SeuNome
  2. Envie na tarefa: Atividade Cap 10 - Estruturas (Structs), Receiver Functions e Composição (Embedding)
🔑 Gabarito de Código & Solução Comentada
package main

import "fmt"

type Pessoa struct { Nome string }
type Funcionario struct {
    Pessoa // Embedding anonimo
    Salario float64
}

func main() {
    f := Funcionario{Pessoa: Pessoa{Nome: "Ana"}, Salario: 7500.0}
    fmt.Printf("Funcionario: %s (R$ %.2f)\n", f.Nome, f.Salario)
}

⚡ Nível 3: Integração

Problema 10.3 — Tags de Struct para Serialização JSON (json:'campo,omitempty')

Contexto: Tags de Struct para Serialização JSON (json:'campo,omitempty') no contexto de Estruturas (Structs), Receiver Functions e Composição (Embedding).

Requisitos de Execução:

  1. Mapear campos de struct com tags JSON e converter com json.Marshal.

Resultado Esperado

Struct serializada em JSON conforme tags declarativas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_10_3_SeuNome
  2. Envie na tarefa: Atividade Cap 10 - Estruturas (Structs), Receiver Functions e Composição (Embedding)
🔑 Gabarito de Código & Solução Comentada
package main

import (
    "encoding/json"
    "fmt"
)

type ProdutoDto struct {
    Id    int     `json:"id"`
    Nome  string  `json:"nome"`
    Preco float64 `json:"preco,omitempty"`
}

func main() {
    p := ProdutoDto{Id: 1, Nome: "Teclado", Preco: 250.0}
    dados, _ := json.Marshal(p)
    fmt.Println("JSON:", string(dados))
}

🏆 Nível 4: Desafio Corporativo

Problema 10.4 — Structs Anônimas para Dados Temporários e Testes de Tabela

Contexto: Structs Anônimas para Dados Temporários e Testes de Tabela no contexto de Estruturas (Structs), Receiver Functions e Composição (Embedding).

Requisitos de Execução:

  1. Criar struct anônima em lote para execução de cenários de teste.

Resultado Esperado

Tabela de dados estruturada com structs anônimas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_10_4_SeuNome
  2. Envie na tarefa: Atividade Cap 10 - Estruturas (Structs), Receiver Functions e Composição (Embedding)
🔑 Gabarito de Código & Solução Comentada
package main

import "fmt"

func main() {
    usuario := struct {
        id   int
        role string
    }{id: 10, role: "ADMIN"}
    fmt.Printf("User: #%d (%s)\n", usuario.id, usuario.role)
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos