0Pricing
Go Academy · Lección

gob y codificación binaria

Codifique valores de Go

gob y codificación binaria es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Qué es gob

encoding/gob es un formato binario específico de Go para serializar valores de Go. Es compacto y rápido, ideal para la comunicación entre programas Go y para el almacenamiento en disco.

gob frente a JSON

JSON es texto, legible para las personas y compatible entre lenguajes. gob es binario, solo funciona con Go, pero es más compacto y rápido de codificar. Use gob cuando ambos extremos sean programas Go.

Codificar en un búfer

Un gob.Encoder escribe en cualquier io.Writer. Aquí usamos un bytes.Buffer para almacenar la salida binaria.

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())
}

Decodificar desde un búfer

Un gob.Decoder lee de un io.Reader y rellena un puntero, igual que 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)
}

Codificar estructuras

gob gestiona las estructuras de forma natural. Solo se codifican los campos exportados.

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)
}

Codificar mapas y slices

Los tipos compuestos, como mapas y slices, se codifican y decodifican 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)
}

Flujos autodescriptivos

Los flujos gob incluyen información de tipos, por lo que el decodificador puede reconstruir valores incluso al asignarlos a una estructura ligeramente diferente pero compatible. Se toleran los campos adicionales o ausentes.

Solo campos exportados

Al igual que JSON, gob solo codifica los campos exportados. Los campos no exportados (en minúsculas) se omiten 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)
}

Otras opciones binarias

Para datos binarios sin formato y de tamaño fijo, encoding/binary escribe enteros y números de coma flotante en formato big endian o little endian. Es de más bajo nivel que gob y no es autodescriptivo.

package main

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

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

Cuándo usar cada opción

Elija:

  • json - API, configuración y compatibilidad entre lenguajes
  • gob - comunicación entre programas Go, compacidad y facilidad con estructuras
  • binary - diseños exactos de bytes y protocolos

No legible para las personas

La salida de gob es binaria; al imprimirla se muestran caracteres ilegibles. Ese es el coste de la compacidad. Úsela para máquinas, no para registros que deban leer las personas.

Comprobación rápida

¿Cuándo es mejor elegir gob en lugar de JSON?

Repaso

Codificación gob y binaria:

  • gob.NewEncoder/NewDecoder para comunicación binaria entre programas Go
  • Compacta, autodescriptiva y limitada a campos exportados
  • encoding/binary para diseños exactos de bytes
  • JSON sigue siendo la mejor opción para la compatibilidad entre lenguajes y la legibilidad

Preguntas frecuentes

¿La lección «gob y codificación binaria» es gratis?

Sí — el texto completo de «gob y codificación binaria» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «gob y codificación binaria»?

Codifique valores de Go Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «gob y codificación binaria»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Repaso de encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob y codificación binaria
← Volver a Go Academy