Tipos compostos — arrays, slices, maps e structs
Ao final desta aula você será capaz de...
- Diferenciar arrays de slices.
- Usar
append,len,capcom segurança. - Usar map para indexação rápida da agenda.
Continuidade do mini-projeto
Evolução do Contact Book:
Contactagrupa os dados de um contato;map[string]Contactusa o UUID textual como chave primária lógica;- funções de listagem transformam os valores do map em
[]Contact.
type Contact struct {
ID string
Name string
Email string
Phone string
Favorite bool
}
contacts := make(map[string]Contact)
contact := Contact{
ID: "550e8400-e29b-41d4-a716-446655440000",
Name: "Bia",
Email: "bia@example.com",
Phone: "+55 21 99999-9999",
Favorite: true,
}
contacts[contact.ID] = contact
Pontos da aula
- Arrays: tamanho fixo (base conceitual).
- Slices: estrutura principal do dia a dia.
- Maps:
make, leitura, remoção,comma ok.
Erros comuns que você pode encontrar
index out of range.assignment to entry in nil map(esqueceumake(map[...])).- Confundir nil slice com slice vazio em validações.
Exercício prático
Refatore o Contact Book para:
- representar contatos com
Contact; - armazená-los em
map[string]ContactusandoContact.IDcomo chave; - implementar
findByIDeremoveByID.
Entrega esperada
listretorna os contatos em um slice.- Map inicializado com
make. - Busca por ID feita diretamente no map.
Desafio extra (opcional)
Implementar findByEmail como busca secundária, sem transformar email em chave primária.
Continue em Contact Book: armazenamento.