Pular para o conteúdo principal

Structs

4 min de leituraArquivado emLinguagem de Programação Goem

Aprenda como structs no Go permitem modelar dados do mundo real agrupando campos em tipos próprios. Zero values, inicialização posicional e nomeada, e notação de ponto.

Structs

Aplicações de produção trabalham com dados que frequentemente não cabem em um único tipo primitivo. Um User não é apenas uma string — ele tem nome, email e idade. Um Server não é apenas um inteiro — ele tem endereço, porta e timeout. O tipo struct do Go resolve isso permitindo que você defina seus próprios tipos de dados compostos, agrupando campos relacionados sob um único nome.

Uma struct é definida usando as keywords type e struct:

Cada linha dentro das chaves declara um campo: um nome seguido de um tipo. Campos podem ser de qualquer tipo — primitivos, outras structs, slices, maps ou pointers. Juntos, eles descrevem a forma dos dados que seu tipo armazena.

Um exemplo mais completo:

Uma vez definido, Student é um tipo completo em Go — você pode declarar variáveis desse tipo, passá-lo para funções, armazená-lo em slices e usá-lo em qualquer lugar onde um tipo é esperado.

Zero value struct

O zero value de uma struct é uma struct onde cada campo é definido com seu próprio zero value: 0 para tipos numéricos, false para booleanos, "" para strings e nil para pointers, slices, maps e interfaces.

Uma zero value struct pode ser criada com uma declaração var:

Também pode ser criada com uma short declaration usando um struct literal vazio:

Ambas as formas produzem resultados idênticos — uma struct totalmente inicializada onde cada campo armazena o zero value de seu tipo. Não existem structs não inicializadas em Go.

Inicializando valores de campos

Go oferece duas sintaxes para inicializar uma struct com valores específicos.

Inicialização implícita (posicional) — os valores são fornecidos na exata ordem em que os campos foram declarados, sem nomes de campos:

É compacto, mas frágil — se você adicionar um campo, remover um ou reordená-los, todo callsite posicional quebra silenciosamente.

Inicialização explícita (nomeada) — os nomes dos campos são especificados junto com os valores:

Esse é o estilo idiomático em Go. Os campos podem aparecer em qualquer ordem, e qualquer campo omitido é automaticamente definido com seu zero value. Essa forma é resiliente a mudanças na definição da struct.

Prefira inicialização nomeada

A inicialização posicional é frágil — qualquer mudança na ordem ou quantidade de campos da struct corrompe silenciosamente todo callsite que a utiliza. Prefira sempre campos nomeados, exceto para structs muito pequenas e estáveis.

Notação de ponto

Campos são lidos e escritos usando notação de ponto: variavel.NomeDoCampo.

Lendo um campo:

Escrevendo um campo:

A notação de ponto funciona da mesma forma independentemente de como a struct foi criada — com var, um struct literal, ou qualquer outra forma.