Go Academy · Lektion

gob og binær kodning

Kod Go-værdier

Lektion 4 af 413 trin

gob og binær kodning er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad er gob

encoding/gob er et Go-specifikt binært format til serialisering af Go-værdier. Det er kompakt og hurtigt og egner sig godt til kommunikation fra Go til Go samt lagring på disk.

gob kontra JSON

JSON er tekstbaseret, læsbart for mennesker og kan bruges på tværs af sprog. gob er binært, kun til Go, men mere kompakt og hurtigere at kode. Brug gob, når begge ender er Go-programmer.

Kodning til en buffer

En gob.Encoder skriver til enhver io.Writer. Her bruger vi en bytes.Buffer til at holde det binære output.

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

Afkodning fra en buffer

En gob.Decoder læser fra en io.Reader og udfylder en pointer ligesom 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)
}

Kodning af strukturer

gob håndterer strukturer naturligt. Kun eksporterede felter kodes.

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

Kodning af maps og slices

Sammensatte typer som maps og slices kodes og afkodes gennemsigtigt.

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

Selvbeskrivende streams

gob-streams indeholder typeinformation, så dekoderen kan genskabe værdier, selv når de knyttes til en lidt anderledes, men kompatibel struktur. Ekstra eller manglende felter accepteres.

Kun eksporterede felter

Ligesom JSON koder gob kun eksporterede felter. Ikke-eksporterede felter (med små begyndelsesbogstaver) springes over uden fejl.

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

Andre binære muligheder

Til rå binære data med fast størrelse skriver encoding/binary heltal og decimaltal i big- eller little-endian-format. Det er et lavere niveau end gob og er ikke selvbeskrivende.

package main

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

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

Hvornår skal du bruge hvad

Vælg:

  • json - API'er, konfiguration og brug på tværs af sprog
  • gob - Go til Go, kompakt og nemt med strukturer
  • binary - præcise byte-layouts og protokoller

Ikke læsbart for mennesker

gob-output er binært; hvis du udskriver det, vises der volapyk. Det er prisen for kompakthed. Brug det til maskiner, ikke til logfiler, du skal læse.

Hurtigt tjek

Hvornår er gob et bedre valg end JSON?

Opsummering

gob- og binær kodning:

  • gob.NewEncoder/NewDecoder til binær kommunikation fra Go til Go
  • Kompakt, selvbeskrivende og begrænset til eksporterede felter
  • encoding/binary til præcise byte-layouts
  • JSON er stadig bedst til brug på tværs af sprog og til læsbarhed
Gratis at komme i gang

Lær Go med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “gob og binær kodning” gratis?

Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “gob og binær kodning”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “gob og binær kodning”?

Kod Go-værdier Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Go Academy?

Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “gob og binær kodning”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Go Academy-lektion?

Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Opsummering af encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob og binær kodning
← Tilbage til Go Academy