gob og binær kodning
Kod Go-værdier
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 sproggob- Go til Go, kompakt og nemt med strukturerbinary- 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/NewDecodertil binær kommunikation fra Go til Go- Kompakt, selvbeskrivende og begrænset til eksporterede felter
encoding/binarytil præcise byte-layouts- JSON er stadig bedst til brug på tværs af sprog og til læsbarhed
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
- Opsummering af encoding/json
- encoding/xml
- encoding/csv
- gob og binær kodning