🚀 Capítulo 05: Blocos de Lego (Tema: Lego)
NOTE
Este capítulo utiliza a temática de Lego para explicar as Structs e Interfaces em Go. Monte os seus tipos de dados juntando peças menores, sem a complexidade de classes e herança!
1. 🎯 Objetivo da Aula
Compreender o conceito de Structs (Estruturas de Dados), como Go alcança a organização de objetos sem usar classes ou herança, e uma introdução às Interfaces.
2. 🏢 O Cenário Prático (Seu Desafio)
Imagine que você está brincando com blocos de Lego. Se você quiser criar um “Carro de Polícia”, você não tem um molde de plástico fechado e inquebrável de um carro. Você pega um bloco que serve de chassi, encaixa quatro blocos de rodas, coloca um bloco de volante e uma pecinha azul e vermelha em cima para ser a sirene. Você compõe o objeto juntando partes menores!
No desenvolvimento de software tradicional (como em Java ou C++), nós usamos “Classes” e “Herança” para criar objetos. Mas o Go achou isso muito complexo e preferiu seguir a filosofia do Lego!
- No Go, não existe a palavra-chave
class! - Nós usamos Structs para criar moldes de dados e juntamos peças menores para formar objetos complexos. Seu desafio é montar o seu Lego!
🧠 Fundamentos: A Teoria Traduzida
🧱 1. O que é uma Struct?
Uma struct (estrutura) é uma coleção de variáveis (campos) agrupadas sob um único nome. É a forma de criarmos o nosso próprio tipo de dado!
type Heroi struct {
Nome string
Poder string
NivelForca int
}classDiagram class Heroi { string Nome string Poder int NivelForca +GritarPoder() }
Para usar essa struct e criar um herói de verdade (uma instância):
homemDeFerro := Heroi{
Nome: "Tony Stark",
Poder: "Armadura Tecnológica",
NivelForca: 95,
}🔌 2. E os Métodos?
Em outras linguagens, as funções ficam dentro da classe. Em Go, nós criamos a função fora e dizemos a qual Struct ela pertence (isso se chama Receiver):
func (h Heroi) GritarPoder() {
fmt.Println("Eu uso meu poder de", h.Poder)
}4. 📖 Exemplo Guiado: O Robô de Lego
Vamos criar uma Struct para um robô e um método para ele falar:
package main
import "fmt"
type Robo struct {
Nome string
Cor string
}
func (r Robo) Apresentar() {
fmt.Println("Olá, eu sou o robô", r.Nome, "e minha cor é", r.Cor)
}
func main() {
meuRobo := Robo{Nome: "R2-D2", Cor: "Azul e Branco"}
meuRobo.Apresentar()
}5. 🛠️ Prática Obrigatória 1: Criando a sua Struct
- Crie uma Struct chamada
Carrocom três campos:Marca(string),Modelo(string) eAno(int). - Dentro da função
main, crie uma variável chamadameuCarropreenchendo os dados do seu carro dos sonhos usando essa Struct.
6. 🛠️ Prática Obrigatória 2: Adicionando uma Ação
- Crie um método para a Struct
CarrochamadoAcelerar. Esse método não recebe parâmetros, apenas imprime na tela a frase:"O carro [Marca] [Modelo] fez VRUMMM!".
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 05 Go_Lego) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
spec_backend_com_golang_e_gin/
├── capitulos/
│ └── capitulo_05_lego.md💡 Checkpoint de Lógica
Em Go, se o nome do campo da Struct começar com letra Maiúscula (ex: Nome), ele é público e pode ser visto por outros arquivos. Se começar com letra minúscula (ex: nome), ele é privado!
10. 🔥 Desafio de Fixação
Pesquise o que é uma Interface em Go e como ela permite que Structs diferentes (como um Carro e uma Moto) usem o mesmo método Acelerar.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
type Carro struct {
Marca string
Modelo string
Ano int
}
// Dentro da main:
meuCarro := Carro{Marca: "Ferrari", Modelo: "Roma", Ano: 2023}Gabarito da Prática 2:
func (c Carro) Acelerar() {
fmt.Println("O carro", c.Marca, c.Modelo, "fez VRUMMM!")
}