0Pricing
Go Academy · Aula

gob e codificação binária

Codifique valores de Go

gob e codificação binária é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 4 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.

O que é gob

encoding/gob é um formato binário específico do Go para serializar valores Go. Ele é compacto e rápido, ideal para comunicação entre programas Go e para armazenamento em disco.

gob versus JSON

JSON é textual, legível por humanos e compatível entre linguagens. gob é binário, exclusivo do Go, mas mais compacto e rápido para codificar. Use gob quando os dois lados forem programas Go.

Codificando em um buffer

Um gob.Encoder grava em qualquer io.Writer. Aqui usamos um bytes.Buffer para armazenar a saída binária.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	enc := gob.NewEncoder(&buf)
	enc.Encode(42)
	fmt.Println("bytes written:", buf.Len())
}

Decodificando de um buffer

Um gob.Decoder lê de um io.Reader e preenche um ponteiro, assim como Unmarshal.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode(42)
	var n int
	gob.NewDecoder(&buf).Decode(&n)
	fmt.Println(n)
}

Codificando estruturas

gob lida naturalmente com estruturas. Somente campos exportados são codificados.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode(User{"Ann", 30})
	var u User
	gob.NewDecoder(&buf).Decode(&u)
	fmt.Println(u)
}

Codificando mapas e fatias

Tipos compostos, como mapas e fatias, são codificados e decodificados de forma transparente.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode([]int{1, 2, 3})
	var s []int
	gob.NewDecoder(&buf).Decode(&s)
	fmt.Println(s)
}

Fluxos autodescritivos

Os fluxos gob incluem informações de tipo, portanto o decodificador pode reconstruir os valores mesmo ao mapeá-los para uma estrutura ligeiramente diferente, mas compatível. Campos extras ou ausentes são aceitos.

Somente campos exportados

Assim como JSON, gob codifica apenas campos exportados. Campos não exportados (em letras minúsculas) são ignorados silenciosamente.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

type T struct {
	Public  int
	private int
}

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode(T{Public: 1, private: 2})
	var out T
	gob.NewDecoder(&buf).Decode(&out)
	fmt.Println(out.Public, out.private)
}

Outras opções binárias

Para dados binários brutos de tamanho fixo, encoding/binary grava inteiros e números de ponto flutuante em ordem de bytes do mais significativo para o menos significativo ou vice-versa. Ele é de nível mais baixo que gob e não é autodescritivo.

package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	binary.Write(&buf, binary.BigEndian, uint32(258))
	fmt.Println(buf.Bytes())
}

Quando usar cada opção

Escolha:

  • json - APIs, configuração e compatibilidade entre linguagens
  • gob - comunicação entre programas Go, formato compacto e facilidade com estruturas
  • binary - organização exata dos bytes e protocolos

Não legível por humanos

A saída gob é binária; imprimi-la mostra caracteres sem sentido. Essa é a compensação pela compactação. Use-a para máquinas, não para registros que você lê.

Verificação rápida

Quando gob é uma escolha melhor que JSON?

Recapitulação

Codificação gob e binária:

  • gob.NewEncoder/NewDecoder para comunicação binária entre programas Go
  • Formato compacto e autodescritivo, com apenas campos exportados
  • encoding/binary para organizações exatas de bytes
  • JSON continua sendo a melhor opção para compatibilidade entre linguagens e legibilidade

Perguntas Frequentes

A aula “gob e codificação binária” é grátis?

Sim — o texto completo de “gob e codificação binária” é 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 “gob e codificação binária”?

Codifique valores de Go 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 4 de 4.

Quanto tempo leva a aula “gob e codificação binária”?

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

  1. Revisão de encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob e codificação binária
← Voltar para Go Academy