Go oferece diversos métodos eficazes para exibir o conteúdo de variáveis struct na saída do console. Este guia explora três abordagens populares: definir a struct, empregar a função fmt.Printf
e utilizar o pacote encoding/json
.
Sumário
Declarando Structs em Go
Antes de imprimir uma struct, você deve defini-la. Uma struct agrupa valores de diferentes tipos sob um único nome. Aqui está um exemplo representando uma pessoa:
package main
import "fmt"
type Person struct {
FirstName string
LastName string
Age int
}
func main() {
person := Person{FirstName: "John", LastName: "Doe", Age: 30}
// ... (Métodos de impressão irão aqui) ...
}
Isso define uma struct Person
com campos para primeiro nome, último nome e idade. Uma instância, person
, é criada e inicializada.
Usando fmt.Printf
fmt.Printf
oferece saída formatada versátil. Você pode imprimir campos de struct individualmente, mas isso se torna trabalhoso para structs grandes.
package main
import "fmt"
type Person struct {
FirstName string
LastName string
Age int
}
func main() {
person := Person{FirstName: "John", LastName: "Doe", Age: 30}
fmt.Printf("Nome: %s %s, Idade: %dn", person.FirstName, person.LastName, person.Age)
}
Isso imprime as informações da pessoa usando especificadores de formato. Embora funcional, requer a especificação manual de cada campo.
Utilizando json.Marshal
O pacote encoding/json
oferece uma solução mais elegante, especialmente para structs complexas. json.Marshal
converte um valor Go para JSON, que é então impresso. Isso lida automaticamente com todos os campos.
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
Age int `json:"age"`
}
func main() {
person := Person{FirstName: "John", LastName: "Doe", Age: 30}
jsonData, err := json.Marshal(person)
if err != nil {
fmt.Println("Erro:", err)
return
}
fmt.Println(string(jsonData))
}
json.Marshal
converte person
em um slice de bytes JSON. As tags json:"..."
controlam os nomes dos campos JSON. O tratamento de erros é crucial. A saída é uma representação JSON formatada, ideal para log ou depuração, e escala bem para structs grandes.
Escolhendo o Método Certo
fmt.Printf
fornece controle preciso para structs simples, enquanto json.Marshal
oferece uma solução concisa e escalável para structs complexas. A melhor abordagem depende da complexidade da sua struct e dos requisitos específicos.