🧩 Exercícios: Estruturas (Structs), Receiver Functions e Composição (Embedding)
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 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:
- Criar struct
ContaBancariacom 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)
- Salve o arquivo como:
Atividade_10_1_SeuNome - 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:
- Embutir struct
Pessoadentro deFuncionarioherdando 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)
- Salve o arquivo como:
Atividade_10_2_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_10_3_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_10_4_SeuNome - 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 |