5/100 Dias de Golang - Tipos Compostos - Structs
Table of Contents
#
Structs
Structs são tipos de dados compostos que permitem agrupar múltiplos campos de diferentes tipos em uma única estrutura. Elas são semelhantes às structs em C e C++, servindo como uma forma de criar objetos. Porém sem ser uma classe! Go não é uma linguagem orientada a objetos, mas podemos simular objetos com structs. Veja como definir uma struct:
type Person struct {
Name string
Age int
}
Aqui temos uma struct chamada Person
com dois campos: Name
e Age
. Para criar uma variável do tipo Person
, fazemos da seguinte forma:
var p Person
Podemos atribuir valores aos campos da struct da seguinte forma:
p.Name = "Victor"
p.Age = 29
Podemos também definir uma struct com valores:
var p = Person{
Name: "Victor",
Age: 29,
}
Para acessar os campos da struct:
fmt.Println(p.Name) // Victor
fmt.Println(p.Age) // 29
#
Composição
Podemos criar structs que contêm outras structs. Por exemplo, podemos criar uma struct Address
e uma struct Person
que contém um campo do tipo Address
. Isso seria o mais próximo da propriedade de Herança em linguagens orientadas a objetos.
type Address struct {
Street string
City string
}
type Person struct {
Name string
Age int
Address Address
}
Podemos criar uma variável do tipo , com valores já definidos, da seguinte forma:
var p = Person{
Name: "Victor",
Age: 29,
Address: Address{
Street: "Rua 1",
City: "Curitiba",
},
}
Para acessar os campos da struct Address
:
fmt.Println(p.Address.Street) // Rua 1
fmt.Println(p.Address.City) // Curitiba
Vamos compor uma struct de Person
com uma struct de Books
, onde Books
é uma struct que possui um campo Title
do tipo string
e um campo Author
do tipo string
. E a struct Person
possui um campo Bookstore
que é um slice de Books
.
type Books struct {
Title string
Author string
}
type Person struct {
Name string
Age int
Bookstore []Books
}
Vamos usar criar uma person e adicionar alguns livros à sua Bookstore
.
var p = Person{
Name: "Victor",
Age: 29,
Bookstore: []Books{
{Title: "Livro 1", Author: "Autor 1"},
{Title: "Livro 2", Author: "Autor 2"},
},
}
Podemos também adicionar um livro à Bookstore
da seguinte forma:
p.Bookstore = append(p.Bookstore, Books{Title: "Livro 3", Author: "Autor 3"})
#
Métodos
Go não é uma linguagem orientada a objetos, mas podemos simular métodos de objetos com funções. Vamos criar um método para a struct Person
que limpa todos os livros da Bookstore
.
type Books struct {
Title string
Author string
}
type Person struct {
Name string
Age int
Bookstore []Books
}
func (p *Person) ClearBookstore() {
clear(p.Bookstore)
}
#
Referências
- Capítulo 4 - Tipos Compostos A Linguagem de Programação Go
- Chapter 3 - Composite Types Learning Go: An Idiomatic Approach to Real-World Go Programming