Capítulo 10: Estruturas (Structs) 🤖🌆
Neste capítulo, vamos aprender a criar nossos próprios tipos de dados compostos usando as Structs no Go, com o tema Cyberpunk 2077!
📖 O que são Structs?
Uma struct (estrutura) permite agrupar variáveis de tipos diferentes sob um único nome. No Go, não temos classes! Usamos structs para representar objetos e podemos adicionar funções a elas (chamadas de métodos).
📖 Exemplo Guiado: Registro de Mercenário
Vamos criar uma estrutura para representar um Mercenário de Night City e um método para exibir seus dados.
- Crie o arquivo
mercenario.gona pastasrc/:
package main
import "fmt"
// Definindo a estrutura
type Mercenario struct {
Apelido string
Nivel int
Cibernetica float64 // Porcentagem de implantes
}
// Adicionando um método à struct Mercenario
// O '(m Mercenario)' antes do nome da função é o "receiver" (receptor)
func (m Mercenario) exibirStatus() {
fmt.Println("--- Registro de Night City ---")
fmt.Println("Apelido:", m.Apelido)
fmt.Println("Nivel:", m.Nivel)
fmt.Println("Implantes:", m.Cibernetica, "%")
}
func main() {
// Criando uma instância da struct
v := Mercenario{
Apelido: "V",
Nivel: 50,
Cibernetica: 75.5,
}
// Chamando o método
v.exibirStatus()
}🕹️ Como Executar e Testar no VS Code
- Abra o terminal integrado.
- Execute:
go run mercenario.go
Resultado Esperado:
--- Registro de Night City ---
Apelido: V
Nivel: 50
Implantes: 75.5 %📊 Ilustração Visual: Estrutura e Métodos
Veja como os dados e funções ficam agrupados:
classDiagram class Mercenario { +String Apelido +int Nivel +float64 Cibernetica +exibirStatus() }
🛠️ Prática Obrigatória 1: Cadastro de Ciborgue
Crie um programa chamado cadastro_ciborgue.go com uma struct Ciborgue que tenha os campos Modelo (string), Bateria (int) e Ativo (bool). Crie um método exibir() para mostrar os dados formatados (ex: se ativo for true, mostre “Status: Ativo”).
🔑 Gabarito de Código
Prática 1: cadastro_ciborgue.go
package main
import "fmt"
type Ciborgue struct {
Modelo string
Bateria int
Ativo bool
}
func (c Ciborgue) exibir() {
fmt.Println("\n--- Ciborgue Cadastrado ---")
fmt.Println("Modelo:", c.Modelo)
fmt.Println("Bateria:", c.Bateria, "%")
status := "Inativo"
if c.Ativo {
status = "Ativo"
}
fmt.Println("Status:", status)
}
func main() {
c := Ciborgue{
Modelo: "T-800",
Bateria: 100,
Ativo: true,
}
c.exibir()
}