Go Tipos Básico
Structs
Em Go, uma struct é um tipo composto que agrupa campos de tipos possivelmente diferentes sob um único nome. Pense nela como uma ficha cadastral: cada campo tem um nome e um tipo, e você cria valores preenchendo esses campos.
Structs são a base para modelar entidades do mundo real, como Pessoa, Produto ou Ponto. Você pode declarar uma struct com type Nome struct { ... } e depois criar valores usando literais de struct, que podem ser nomeados (Pessoa{Nome: "Ana", Idade: 30}) ou posicionais (Pessoa{"Ana", 30}).
Campos podem ter tags (metadados entre crases) usadas por bibliotecas como encoding/json para mapear nomes. Structs também podem ser anônimas, ou seja, declaradas e usadas na hora sem um nome de tipo, úteis para dados temporários.
Structs são comparáveis com == se todos os seus campos forem comparáveis. Isso permite verificar igualdade campo a campo de forma direta, mas lembre-se: a comparação considera todos os campos, incluindo os não exportados.
Pontos-chave
- Uma
structagrupa campos nomeados de tipos variados em um único tipo. - Literais de struct podem ser nomeados (
Campo: valor) ou posicionais (na ordem de declaração). - Tags são strings entre crases após o tipo do campo, usadas por bibliotecas para metadados.
- Structs anônimas são declaradas e usadas sem um nome de tipo, úteis para dados pontuais.
- Structs são comparáveis com
==se todos os campos forem comparáveis.
package main
import (
"encoding/json"
"fmt"
)
// Pessoa é uma struct com campos e tags JSON.
type Pessoa struct {
Nome string `json:"nome"`
Idade int `json:"idade"`
}
func main() {
// Literal nomeado
p1 := Pessoa{Nome: "Ana", Idade: 30}
// Literal posicional (ordem dos campos)
p2 := Pessoa{"Bruno", 25}
fmt.Println(p1)
fmt.Println(p2)
// Struct anônima
ponto := struct {
X, Y int
}{X: 10, Y: 20}
fmt.Println("Ponto:", ponto)
// Comparação com == (todos os campos comparáveis)
fmt.Println("p1 == p2?", p1 == p2)
// Tags em ação: marshal para JSON
b, _ := json.Marshal(p1)
fmt.Println("JSON:", string(b))
}