Da trilha de Go Este conceito ainda não saiu como card do dia. ir para o card de hoje

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 struct agrupa 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.
structs.go
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))
}

Exercícios

  1. 1
    Fácil

    Criando e comparando structs

    Defina uma struct Livro com os campos Titulo (string) e Ano (int). Crie dois livros, imprima-os e verifique se são iguais usando ==.

    Resolver
  2. 2
    Médio

    Struct com tags e JSON

    Crie uma struct Produto com campos Nome (string) e Preco (float64), ambos com tags JSON (json:"nome" e json:"preco"). Crie um produto, converta para JSON com json.Marshal e imprima a string resultante.

    Resolver
  3. 3
    Desafio

    Struct anônima e comparação de fatias

    Defina uma struct anônima para representar um ponto com coordenadas X e Y (int). Crie uma fatia com três pontos, imprima cada um e depois compare dois pontos para verificar se são iguais. Use uma struct anônima dentro de um slice.

    Resolver

Continue estudando