0Pricing
Go Academy · Lezione

gob e codifica binaria

Codificare valori Go

gob e codifica binaria è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Che cos'è gob

encoding/gob è un formato binario specifico di Go per serializzare valori Go. È compatto e veloce, ideale per la comunicazione tra programmi Go e per l'archiviazione su disco.

gob e JSON

JSON è testuale, leggibile dagli esseri umani e compatibile tra linguaggi. gob è binario, limitato a Go, ma più compatto e veloce da codificare. Usare gob quando entrambe le estremità sono programmi Go.

Codifica in un buffer

Un gob.Encoder scrive in qualsiasi io.Writer. In questo caso si usa un bytes.Buffer per contenere l'output binario.

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

Decodifica da un buffer

Un gob.Decoder legge da un io.Reader e valorizza un puntatore, proprio come 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)
}

Codifica delle struct

gob gestisce naturalmente le struct. Vengono codificati solo i campi esportati.

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

Codifica di mappe e slice

I tipi compositi, come mappe e slice, vengono codificati e decodificati in modo trasparente.

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

Stream auto-descrittivi

Gli stream gob includono informazioni sui tipi, quindi il decoder può ricostruire i valori anche associandoli a una struct leggermente diversa ma compatibile. I campi aggiuntivi o mancanti sono tollerati.

Solo campi esportati

Come JSON, gob codifica solo i campi esportati. I campi non esportati, cioè quelli con iniziale minuscola, vengono ignorati senza errori.

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

Altre opzioni binarie

Per il formato binario grezzo a dimensione fissa, encoding/binary scrive interi e numeri in virgola mobile in formato big-endian o little-endian. È di livello più basso rispetto a gob e non è auto-descrittivo.

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 usare ciascuna opzione

Scegliere:

  • json - API, configurazione e compatibilità tra linguaggi
  • gob - comunicazione tra programmi Go, compattezza e semplicità con le struct
  • binary - layout esatti dei byte e protocolli

Non leggibile dagli esseri umani

L'output di gob è binario; stamparlo mostra caratteri senza senso. Questo è il compromesso necessario per ottenere la compattezza. Usarlo per le macchine, non per i log da leggere.

Verifica rapida

Quando è preferibile usare gob invece di JSON?

Riepilogo

Codifica gob e binaria:

  • gob.NewEncoder/NewDecoder per la comunicazione binaria tra programmi Go
  • Compatta, auto-descrittiva e limitata ai campi esportati
  • encoding/binary per layout esatti dei byte
  • JSON rimane la scelta migliore per la compatibilità tra linguaggi e la leggibilità

Domande Frequenti

La lezione «gob e codifica binaria» è gratuita?

Sì — il testo completo di «gob e codifica binaria» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «gob e codifica binaria»?

Codificare valori Go Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «gob e codifica binaria»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Ripasso di encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob e codifica binaria
← Torna a Go Academy