Golang: Structs (Parte - 9)
•Golang
O que são Structs?
Structs são tipos compostos que permitem agrupar diferentes tipos de dados sob um mesmo nome. Elas são úteis para representar entidades complexas, como uma pessoa, um carro ou um produto.
As structs são semelhantes às classes em outras linguagens de programação.
Segue um exemplo simples. O código está comentado explicando o que cada parte faz.
package main
import "fmt"
// Definindo uma struct
type Pessoa struct {
Nome string
Idade int
Cidade string
}
func main() {
// Criando uma instância da struct
p1 := Pessoa{
Nome: "Lucas",
Idade: 25,
Cidade: "São Paulo",
}
// Acessando os campos da struct
fmt.Println("Nome:", p1.Nome)
fmt.Println("Idade:", p1.Idade)
fmt.Println("Cidade:", p1.Cidade)
// Modificando um campo da struct
p1.Idade = 26
fmt.Println("Idade atualizada:", p1.Idade)
// Criando uma slice de structs
pessoas := []Pessoa{
{"Wesley", 30, "Rio de Janeiro"},
{"Tinta", 28, "Belo Horizonte"},
}
// Iterando sobre a slice de structs
for _, pessoa := range pessoas {
fmt.Printf("Nome: %s, Idade: %d, Cidade: %s\n", pessoa.Nome, pessoa.Idade, pessoa.Cidade)
}
}
Composição
Por enquando está simples, nada demais. Agora vamos ver como compor várias structs.
As structs podem conter outras structs como campos, permitindo criar estruturas de dados mais complexas. Isso é conhecido como composição.
package main
import "fmt"
type Endereco struct {
Rua string
Cidade string
}
type Pessoa struct {
Nome string
Idade int
Endereco Endereco
}
func main() {
// Criando uma instância da struct
p1 := Pessoa{
Nome: "Lucas",
Idade: 25,
Endereco: Endereco{
Rua: "Rua A",
Cidade: "São Paulo",
},
}
// Acessando os campos da struct
fmt.Println("Nome:", p1.Nome)
fmt.Println("Idade:", p1.Idade)
fmt.Println("Rua:", p1.Endereco.Rua)
fmt.Println("Cidade:", p1.Endereco.Cidade)
}
Métodos
As structs também podem ter métodos associados a elas.
É bem simples, seja o exemplo:
package main
import "fmt"
type Pessoa struct {
Nome string
Idade int
}
func (p Pessoa) Apresentar() {
fmt.Printf("Olá, meu nome é %s e tenho %d anos.\n", p.Nome, p.Idade)
}
func main() {
p1 := Pessoa{
Nome: "Lucas",
Idade: 25,
}
// Chamando o método da struct
p1.Apresentar()
}
Explicando o código:
- Definimos uma struct
Pessoa
com os camposNome
eIdade
. - Criamos um método
Apresentar
associado à structPessoa
. Associamos o método à struct usando(p Pessoa)
, ondep
é o receptor do método. - Dentro do método, usamos
p.Nome
ep.Idade
para acessar os campos da struct. - No
main
, criamos uma instância da structPessoa
e chamamos o métodoApresentar
. - O método imprime uma mensagem apresentando a pessoa.
Só isso. Cria uma função e associa ela a uma struct dessa maneira.