🧩 Exercícios: Vetores (Arrays) e Slices: Estrutura Interna e append
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 05.1 — Criação de Slices com make() e Função append()
Contexto: Criação de Slices com make() e Função append() no contexto de Vetores (Arrays) e Slices: Estrutura Interna e append.
Requisitos de Execução:
- Criar slice com
make([]int, 0, 10), adicionar elementos comappende monitorarlen()ecap().
Resultado Esperado
Slice expandido dinamicamente com duplicação de capacidade no Heap.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_1_SeuNome - Envie na tarefa:
Atividade Cap 05 - Vetores (Arrays) e Slices: Estrutura Interna e append
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func main() {
s := make([]int, 0, 4)
s = append(s, 10, 20, 30)
fmt.Printf("Slice: %v | Len: %d | Cap: %d\n", s, len(s), cap(s))
}
🔍 Nível 2: Prática
Problema 05.2 — Fatiamento de Slices (Slice Expressions [inicio:fim:maxcap])
Contexto: Fatiamento de Slices (Slice Expressions [inicio:fim:maxcap]) no contexto de Vetores (Arrays) e Slices: Estrutura Interna e append.
Requisitos de Execução:
- Extrair sub-fatia de slice compartilhando o mesmo array subjacente com controle de capacidade máxima.
Resultado Esperado
Sub-slice criado apontando para memória contígua.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_2_SeuNome - Envie na tarefa:
Atividade Cap 05 - Vetores (Arrays) e Slices: Estrutura Interna e append
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func main() {
dados := []int{1, 2, 3, 4, 5, 6}
fatia := dados[1:4] // Itens 2, 3, 4
fmt.Printf("Sub-fatia: %v\n", fatia)
}
⚡ Nível 3: Integração
Problema 05.3 — Cópia Independente de Slices com copy()
Contexto: Cópia Independente de Slices com copy() no contexto de Vetores (Arrays) e Slices: Estrutura Interna e append.
Requisitos de Execução:
- Copiar elementos de slice para novo buffer independente prevenindo mutações acidentais.
Resultado Esperado
Cópia profunda realizada: Buffer original inalterado após mutações na cópia.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_3_SeuNome - Envie na tarefa:
Atividade Cap 05 - Vetores (Arrays) e Slices: Estrutura Interna e append
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func main() {
original := []int{10, 20, 30}
clone := make([]int, len(original))
copy(clone, original)
clone[0] = 99
fmt.Printf("Original[0]=%d | Clone[0]=%d\n", original[0], clone[0])
}
🏆 Nível 4: Desafio Corporativo
Problema 05.4 — Prevenção de Vazamento de Memória em Sub-slices de Buffers Grandes
Contexto: Prevenção de Vazamento de Memória em Sub-slices de Buffers Grandes no contexto de Vetores (Arrays) e Slices: Estrutura Interna e append.
Requisitos de Execução:
- Copiar apenas os dados necessários para um novo slice menor permitindo que o GC libere o array gigante.
Resultado Esperado
Vazamento de memória prevenido com liberação de buffers temporários.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_4_SeuNome - Envie na tarefa:
Atividade Cap 05 - Vetores (Arrays) e Slices: Estrutura Interna e append
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func extrairCabecalho(bufferGrande []byte) []byte {
cabecalho := make([]byte, 4)
copy(cabecalho, bufferGrande[:4])
return cabecalho // Permite desalocação do bufferGrande
}
func main() {
b := []byte("HTTP/1.1 200 OK")
fmt.Printf("Cabecalho isolado: %s\n", extrairCabecalho(b))
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |