Golang: Guia sobre Structs e JSON
Um dos conceitos fundamentais em Golang é o uso de structs, que permitem uma forma eficiente de organizar e manipular dados. Neste artigo, vamos explorar a criação e uso de structs em Golang, bem como a conversão de structs para JSON e vice-versa, uma prática comum em aplicações modernas que envolvem APIs.
O Que São Structs?
Structs são tipos de dados compostos que agrupam variáveis sob um único nome, permitindo que você trabalhe com dados relacionados de maneira mais estruturada. Diferentemente das classes em linguagens orientadas a objetos, structs em Golang não suportam herança, mas permitem a composição, o que pode ser visto como uma forma de reutilização de código.
Definindo uma Struct
Para definir uma struct em Golang, você utiliza a palavra-chave
type
seguida pelo nome da struct e a palavra struct
. Veja um exemplo simples:package main import "fmt" type Cliente struct { Nome string Email string CPF int } func main() { cliente := Cliente{ Nome: "Paulo", Email: "rst@rst.com", CPF: 123456789, } fmt.Println(cliente) }
Neste exemplo, definimos uma struct
Cliente
com três campos: Nome
, Email
e CPF
. Criamos uma instância dessa struct e imprimimos seus valores.Composição de Structs
Embora Golang não suporte herança, você pode utilizar composição para reutilizar structs. Vamos supor que queremos criar uma struct
ClienteInternacional
que possui os mesmos campos de Cliente
, mas adiciona um campo Pais
:type ClienteInternacional struct { Cliente Pais string } func main() { clienteInternacional := ClienteInternacional{ Cliente: Cliente{ Nome: "Rodrigo", Email: "rodrigorst@rst.com.br", CPF: 987654321, }, Pais: "Canadá", } fmt.Println(clienteInternacional) }
Métodos em Structs
Em Golang, você pode definir métodos que operam em structs. Vamos adicionar um método
Exibir
à nossa struct Cliente
:func (c Cliente) Exibir() { fmt.Printf("Nome: %s, Email: %s, CPF: %d\\n", c.Nome, c.Email, c.CPF) } func main() { cliente := Cliente{ Nome: "Mayk Brito", Email: "maykbritorst@rst.com.br", CPF: 123456789, } cliente.Exibir() }
Trabalhando com JSON
Uma das operações mais comuns em aplicações web é a conversão de structs para JSON e vice-versa. Em Golang, isso é feito utilizando o pacote
encoding/json
.Convertendo Struct para JSON
Para converter uma struct para JSON, utilizamos a função
json.Marshal
. Veja como fazer isso:import ( "encoding/json" "fmt" ) func main() { cliente := Cliente{ Nome: "Mayk Brito", Email: "maykbritorst@rst.com.br", CPF: 123456789, } clienteJSON, err := json.Marshal(cliente) if err != nil { fmt.Println(err) } fmt.Println(string(clienteJSON)) }
Convertendo JSON para Struct
Para converter um JSON de volta para uma struct, utilizamos a função
json.Unmarshal
:func main() { jsonData := `{"Nome":"Mayk Brito","Email":"maykbritorst@rst.com.bt","CPF":123456789}` var cliente Cliente err := json.Unmarshal([]byte(jsonData), &cliente) if err != nil { fmt.Println(err) } fmt.Println(cliente) }
Utilizando Tags JSON
Você pode controlar a representação JSON de campos individuais de uma struct utilizando tags JSON:
type Cliente struct { Nome string `json:"nome"` Email string `json:"email"` CPF int `json:"cpf"` } func main() { cliente := Cliente{ Nome: "Mayk Brito", Email: "maykbritorst@rst.com", CPF: 123456789, } clienteJSON, err := json.Marshal(cliente) if err != nil { fmt.Println(err) } fmt.Println(string(clienteJSON)) }
Structs são uma ferramenta poderosa em Golang para organizar e manipular dados de forma eficiente. Com a capacidade de converter structs para JSON e vice-versa, Golang se torna uma excelente escolha para o desenvolvimento de aplicações web modernas. Espero que este artigo tenha ajudado a entender melhor como trabalhar com structs e JSON em Golang.
Sendo assim, mãos ao código!