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.

  1. Crie o arquivo mercenario.go na pasta src/:
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

  1. Abra o terminal integrado.
  2. 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()
}

Capitulo Anterior | Proximo Capitulo