Go Em Exemplos: Structs

As structs em Go são coleções tipadas de dados. São úteis para agrupar informações.

package main
import "fmt"

A struct do tipo pessoa tem os campos nome e idade.

type pessoa struct {
    nome  string
    idade int
}

A função novaPessoa constrói uma nova struct de pessoa com um determinado nome.

func novaPessoa(name string) *pessoa {

O valor atribuído para a variável local será retornado pela função.

    p := pessoa{nome: name}
    p.idade = 42
    return &p
}
func main() {

Esta sintaxe cria uma nova struct.

    fmt.Println(pessoa{"Bob", 20})

E possível nomear os campos ao inicializar a struct.

    fmt.Println(pessoa{nome: "Alice", idade: 30})

Os campos omitidos terão valor padrão, ou zero.

    fmt.Println(pessoa{nome: "Fred"})

O prefixo & signfica um ponteiro para a struct.

    fmt.Println(&pessoa{nome: "Ann", idade: 40})

É idiomático encapsular a criação de uma nova struct em uma função construtora.

    fmt.Println(novaPessoa("Jon"))

É possível acessar campos de determinada struct utilizando notação de pontos.

    s := pessoa{nome: "Sean", idade: 50}
    fmt.Println(s.nome)

E também utilizar notação de pontos com ponteiros de structs ponteiros serão de-referenciados automaticamente.

    sp := &s
    fmt.Println(sp.idade)

Structs são mutáveis.

    sp.idade = 51
    fmt.Println(sp.idade)
}
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51

Próximo exemplo: Methods.