Fácil Go

Criando e comparando structs

Enunciado

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

Requisitos

  • Declarar a struct Livro com os campos Titulo e Ano.
  • Criar dois valores de Livro usando literais nomeados.
  • Imprimir os dois livros e o resultado da comparação com ==.

Código inicial

package main

import "fmt"

// Defina a struct Livro aqui

func main() {
	// Crie dois livros e compare
}

Saída esperada

{Go na Prática 2023}
{Go na Prática 2023}
Iguais? true
Ver dica

Use fmt.Println para imprimir a struct diretamente; o formato padrão mostra os valores entre chaves.

Mostrar solução
package main

import "fmt"

// Livro representa um livro com título e ano.
type Livro struct {
	Titulo string
	Ano    int
}

func main() {
	// Dois livros com os mesmos dados
	l1 := Livro{Titulo: "Go na Prática", Ano: 2023}
	l2 := Livro{Titulo: "Go na Prática", Ano: 2023}

	fmt.Println(l1)
	fmt.Println(l2)

	// Comparação campo a campo com ==
	fmt.Println("Iguais?", l1 == l2)
}

Passo a passo

  1. Declaramos o tipo Livro com type Livro struct { ... }, definindo dois campos: Titulo (string) e Ano (int).
  2. No main, criamos l1 e l2 usando literais nomeados: Livro{Titulo: "...", Ano: ...}. Isso deixa claro qual valor vai em cada campo.
  3. fmt.Println(l1) imprime a struct no formato {Go na Prática 2023}, mostrando os valores na ordem dos campos.
  4. Comparamos l1 == l2 com ==. Como todos os campos são comparáveis (string e int), a comparação é válida e retorna true se todos os campos forem iguais.
  5. O resultado é impresso junto com o texto Iguais?.

Por que funciona

Structs em Go são tipos de valor. A comparação com == verifica se todos os campos correspondentes são iguais. Como string e int são comparáveis, a operação é permitida. Se houvesse um campo não comparável (como slice ou map), o código não compilaria.

Erros comuns

  • Esquecer de declarar o tipo antes de usar: l1 := Livro{...} sem type Livro struct gera erro undefined: Livro.
  • Usar literal posicional com ordem errada: Livro{2023, "Go"} causa erro de compilação porque os tipos não batem.
  • Tentar comparar structs com campos não comparáveis: type L struct { Dados []int } e depois l1 == l2 gera erro invalid operation: ... (struct containing []int cannot be compared).

Outra forma de resolver

Você pode usar literais posicionais, mas a ordem importa:

l1 := Livro{"Go na Prática", 2023}

Prefira literais nomeados para maior clareza e robustez a mudanças na ordem dos campos.

Saída esperada

{Go na Prática 2023}
{Go na Prática 2023}
Iguais? true