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 linguaggigob- comunicazione tra programmi Go, compattezza e semplicità con le structbinary- 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/NewDecoderper la comunicazione binaria tra programmi Go- Compatta, auto-descrittiva e limitata ai campi esportati
encoding/binaryper 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
- Ripasso di encoding/json
- encoding/xml
- encoding/csv
- gob e codifica binaria