Codificação e decodificação de JSON
Marshal, Unmarshal e tags de struct
Codificação e decodificação de JSON é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
Visão geral de encoding/json
O pacote encoding/json do Go serializa valores Go para JSON e desserializa JSON de volta para valores Go usando tags de estrutura e reflexão.
json.Marshal
json.Marshal converte um valor Go em bytes JSON. Retorna um erro para tipos não compatíveis (canais, funções e números complexos).
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
u := User{Name: "Alice", Age: 30}
data, err := json.Marshal(u)
fmt.Println(string(data)) // {"name":"Alice","age":30}json.Unmarshal
json.Unmarshal decodifica JSON em um valor Go. O destino deve ser um ponteiro.
var u User
err := json.Unmarshal(data, &u)
fmt.Println(u.Name) // "Alice"Tags de estrutura
Use tags de estrutura json: para controlar os nomes dos campos, omitir valores vazios e ignorar campos não exportados.
type Product struct {
ID int `json:"id"`
Price float64 `json:"price,omitempty"` // omit if zero
secret string // unexported: ignored
}json.Encoder / json.Decoder
Para processamento em fluxo (corpos de resposta e de requisição HTTP), use Encoder e Decoder em vez de Marshal/Unmarshal para evitar carregar toda a carga útil na memória.
// Writing
json.NewEncoder(w).Encode(user)
// Reading
var u User
json.NewDecoder(r.Body).Decode(&u)Decodificando em map[string]any
Decodifique JSON desconhecido em um mapa genérico:
var m map[string]any
json.Unmarshal(data, &m)
fmt.Println(m["name"])json.Number
Por padrão, os números em mapas genéricos são decodificados como float64. Use decoder.UseNumber() para decodificá-los como json.Number, preservando a precisão.
dec := json.NewDecoder(r)
dec.UseNumber()
var m map[string]any
dec.Decode(&m)Serialização personalizada
Implemente json.Marshaler ou json.Unmarshaler para controlar a serialização e a desserialização de um tipo, por exemplo, para formatos personalizados de data.
func (d Date) MarshalJSON() ([]byte, error) {
return json.Marshal(d.Format("2006-01-02"))
}Omitindo campos
Use omitempty para ignorar valores zero. Use json:"-" para sempre excluir um campo da saída JSON, independentemente do valor.
Hidden string `json:"-"`Tratando null
JSON null é desserializado para um valor zero Go em escalares ou define um ponteiro como nil. Serializar um ponteiro nil resulta em null.
Formatação legível
Use json.MarshalIndent para obter uma saída legível:
data, _ := json.MarshalIndent(u, "", " ")Verificação rápida
O que a tag de estrutura `json:"name,omitempty"` faz?
Resumo: serialização e desserialização de JSON
Pontos principais:
- json.Marshal/Unmarshal para dados na memória; Encoder/Decoder para fluxos
- As tags de estrutura controlam nomes, omitempty e exclusão
- Tipos personalizados implementam Marshaler/Unmarshaler
- Use json.MarshalIndent para obter uma saída de depuração
Perguntas Frequentes
A aula “Codificação e decodificação de JSON” é grátis?
Sim — o texto completo de “Codificação e decodificação de JSON” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Codificação e decodificação de JSON”?
Marshal, Unmarshal e tags de struct Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Codificação e decodificação de JSON”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Lendo arquivos com os e bufio
- Escrevendo arquivos e arquivos temporários
- Codificação e decodificação de JSON
- JSON e CSV em streaming