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
Livrocom os camposTituloeAno. - Criar dois valores de
Livrousando 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
- Declaramos o tipo
Livrocomtype Livro struct { ... }, definindo dois campos:Titulo(string) eAno(int). - No
main, criamosl1el2usando literais nomeados:Livro{Titulo: "...", Ano: ...}. Isso deixa claro qual valor vai em cada campo. fmt.Println(l1)imprime a struct no formato{Go na Prática 2023}, mostrando os valores na ordem dos campos.- Comparamos
l1 == l2com==. Como todos os campos são comparáveis (string e int), a comparação é válida e retornatruese todos os campos forem iguais. - 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{...}semtype Livro structgera erroundefined: 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 depoisl1 == l2gera erroinvalid 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