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


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 12.1 — Criação de Map com make(map[K]V) e Operações Básicas

Contexto: Criação de Map com make(map[K]V) e Operações Básicas no contexto de Coleções Hash: Maps, Acesso, Delete e Existência.

Requisitos de Execução:

  1. Inicializar mapa de usuários, inserir pares chave-valor e consultar por chave.

Resultado Esperado

Tabela hash manipulada com acesso em tempo constante O(1).

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_1_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Coleções Hash: Maps, Acesso, Delete e Existência
🔑 Gabarito de Código & Solução Comentada
package main

import "fmt"

func main() {
    capitais := make(map[string]string)
    capitais["BR"] = "Brasilia"
    capitais["US"] = "Washington"
    fmt.Printf("Capital BR: %s\n", capitais["BR"])
}

🔍 Nível 2: Prática

Problema 12.2 — Idiom Comma-OK para Verificação de Existência de Chave

Contexto: Idiom Comma-OK para Verificação de Existência de Chave no contexto de Coleções Hash: Maps, Acesso, Delete e Existência.

Requisitos de Execução:

  1. Verificar se chave existe no mapa com valor, existe := mapa[chave] diferenciando de zero value.

Resultado Esperado

Existência de chave validada com precisão sem falso positivo de zero value.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_2_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Coleções Hash: Maps, Acesso, Delete e Existência
🔑 Gabarito de Código & Solução Comentada
package main

import "fmt"

func main() {
    pontos := map[string]int{"Carlos": 0}
    if pts, ok := pontos["Carlos"]; ok {
        fmt.Printf("Carlos existe no mapa com %d pontos!\n", pts)
    }
    if _, ok := pontos["Inexistente"]; !ok {
        fmt.Println("Chave inexistente tratada com sucesso.")
    }
}

⚡ Nível 3: Integração

Problema 12.3 — Exclusão com delete() e Iteração Aleatória com for range

Contexto: Exclusão com delete() e Iteração Aleatória com for range no contexto de Coleções Hash: Maps, Acesso, Delete e Existência.

Requisitos de Execução:

  1. Deletar chave do mapa com delete(mapa, chave) e iterar sobre as entradas restantes.

Resultado Esperado

Entrada removida do mapa com iteração não-determinística padrão do Go.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_3_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Coleções Hash: Maps, Acesso, Delete e Existência
🔑 Gabarito de Código & Solução Comentada
package main

import "fmt"

func main() {
    cache := map[string]int{"a": 1, "b": 2, "c": 3}
    delete(cache, "b")
    for k, v := range cache {
        fmt.Printf("%s=%d ", k, v)
    }
    fmt.Println()
}

🏆 Nível 4: Desafio Corporativo

Problema 12.4 — Mapa Seguro para Concorrência com sync.RWMutex ou sync.Map

Contexto: Mapa Seguro para Concorrência com sync.RWMutex ou sync.Map no contexto de Coleções Hash: Maps, Acesso, Delete e Existência.

Requisitos de Execução:

  1. Proteger mapa contra concorrência multithread utilizando sync.RWMutex com RLock e Lock.

Resultado Esperado

Mapa protegido contra 'fatal error: concurrent map writes'.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_4_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Coleções Hash: Maps, Acesso, Delete e Existência
🔑 Gabarito de Código & Solução Comentada
package main

import (
    "fmt"
    "sync"
)

type SafeMap struct {
    mu sync.RWMutex
    m  map[string]int
}

func (s *SafeMap) Set(k string, v int) {
    s.mu.Lock(); defer s.mu.Unlock()
    s.m[k] = v
}

func main() {
    sm := SafeMap{m: make(map[string]int)}
    sm.Set("visitas", 100)
    fmt.Println("SafeMap thread-safe homologado.")
}

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