hanging decor lot

O que são e como utilizar tags em structs

Uma feature pouco comentada porém muito útil na linguagem Go, pelo menos no meu ponto de vista, é a tag.

As tags são marcações que colocamos nas propriedades de uma struct. Essas marcações funcionam como metadata para outros packages poderem realizar operações.

Para ficar mais claro, vamos criar um struct comum.

type Pessoa struct {
  Nome      string
  Documento string
  Idade     uint8
}

Utilizando o package encoding/json, que é nativo do Go, vamos escrever um pequeno programa que vai nos retornar a struct em formato json.

func main() {
	p := Pessoa{"Tiago Temporin", "000.000.000-00", 32}
	r, err := json.Marshal(p)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(r))
}

Após executar o programa com go run main.go, o seguinte resultado é exibido no terminal.

{"Nome":"Tiago Temporin","Documento":"000.000.000-00","Idade":32}

Cada uma das propriedades da struct foi “traduzida” para um campo no json. Ok, mas como eu faço para que os campos sejam todos em letras minúsculas? E se eu quiser mudar o nome de uma propriedade?

Bem simples, em cada propriedade, vamos colocar uma tag json seguida do nome que queremos que apareça na “tradução” para o json.

type Pessoa struct {
  Nome      string `json:"nome"`
  Documento string `json:"cpf"`
  Idade     uint8  `json:"idade"`
}

Ao executar o mesmo programa, os atributos passaram a ser os valores que colocamos na tag json.

{"nome":"Tiago Temporin","cpf":"000.000.000-00","idade":32}

Se você quiser omitir algum campo, é só adicionar um - como valor da tag. Caso você queira omitir o campo somente quando ele estiver vazio, adicione um omitempty ao valor do campo.

type Pessoa struct {
  ID        int32  `json:"-"` // sempre omitido
  Nome      string `json:"nome"`
  SobreNome string `json:"sobrenome,omitempty"` // omitido caso esteja vazio
  Documento string `json:"cpf"`
  Idade     uint8  `json:"idade"`
}

Existe um outro package que faz validação dos atributos através de tags, mas essa vai ficar para outro post 😉.

Deixem suas dúvidas nos comentários.

Até a próxima!


Se inscreva na nossa newsletter

* indicates required

Um comentário sobre “O que são e como utilizar tags em structs

Deixe uma resposta