Pular para o conteúdo principal

victorstein.dev

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

  1. Capítulo 4 - Tipos Compostos A Linguagem de Programação Go
  2. Chapter 3 - Composite Types Learning Go: An Idiomatic Approach to Real-World Go Programming