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