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


🧭 Navegação Pedagógica


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

  1. Criar slice com make([]int, 0, 10), adicionar elementos com append e monitorar len() e cap().

Resultado Esperado

Slice expandido dinamicamente com duplicação de capacidade no Heap.

📤 Instruções de Entrega (Microsoft Teams)

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

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

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

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

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

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

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