0Pricing
Go Academy · Lekcja

gob i kodowanie binarne

Koduj wartości Go

gob i kodowanie binarne to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Czym jest gob

encoding/gob to specyficzny dla Go format binarny służący do serializowania wartości Go. Jest kompaktowy i szybki, dlatego idealnie nadaje się do komunikacji między programami Go oraz do przechowywania danych na dysku.

gob a JSON

JSON jest tekstowy, czytelny dla człowieka i niezależny od języka. gob jest binarny i przeznaczony wyłącznie dla Go, ale zajmuje mniej miejsca i szybciej się koduje. gob należy stosować, gdy oba końce komunikacji są programami Go.

Kodowanie do bufora

Obiekt gob.Encoder zapisuje dane do dowolnego io.Writer. W tym przypadku używamy bytes.Buffer do przechowywania wyniku binarnego.

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

Dekodowanie z bufora

Obiekt gob.Decoder odczytuje dane z io.Reader i wypełnia wskaźnik, podobnie jak 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)
}

Kodowanie struktur

gob naturalnie obsługuje struktury. Kodowane są tylko pola eksportowane.

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

Kodowanie map i slice'ów

Typy złożone, takie jak mapy i slice'y, są kodowane i dekodowane w przejrzysty sposób.

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

Strumienie samookreślające

Strumienie gob zawierają informacje o typach, dzięki czemu dekoder może odtworzyć wartości nawet przy mapowaniu ich na nieco inną, ale zgodną strukturę. Dodatkowe lub brakujące pola są akceptowane.

Tylko pola eksportowane

Podobnie jak JSON, gob koduje tylko pola eksportowane. Pola nieeksportowane (zaczynające się małą literą) są po cichu pomijane.

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

Inne opcje binarne

W przypadku surowych danych binarnych o stałym rozmiarze pakiet encoding/binary zapisuje liczby całkowite i zmiennoprzecinkowe w porządku big-endian lub little-endian. Jest on niskopoziomowy i nie opisuje własnego formatu, w przeciwieństwie do gob.

package main

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

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

Kiedy używać poszczególnych rozwiązań

Należy wybrać:

  • json — interfejsy API, konfiguracja, komunikacja między językami
  • gob — komunikacja Go–Go, kompaktowy format, łatwa obsługa struktur
  • binary — dokładny układ bajtów, protokoły

Nieczytelny dla człowieka

Wynik gob jest binarny, więc jego wyświetlenie pokazuje niezrozumiałe znaki. To kompromis na rzecz kompaktowości. Należy używać go w komunikacji między maszynami, a nie w logach przeznaczonych do czytania.

Szybkie sprawdzenie

Kiedy gob jest lepszym wyborem niż JSON?

Podsumowanie

Kodowanie gob i binary:

  • gob.NewEncoder/NewDecoder do binarnej komunikacji Go–Go
  • Kompaktowość, samookreślający się format, tylko pola eksportowane
  • encoding/binary do określania dokładnego układu bajtów
  • JSON nadal jest najlepszy w komunikacji między językami i wtedy, gdy ważna jest czytelność

Często zadawane pytania

Czy lekcja „gob i kodowanie binarne” jest bezpłatna?

Tak — pełny tekst „gob i kodowanie binarne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „gob i kodowanie binarne”?

Koduj wartości Go Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „gob i kodowanie binarne”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Powtórka encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob i kodowanie binarne
← Powrót do Go Academy