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ęzykamigob— komunikacja Go–Go, kompaktowy format, łatwa obsługa strukturbinary— 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/NewDecoderdo binarnej komunikacji Go–Go- Kompaktowość, samookreślający się format, tylko pola eksportowane
encoding/binarydo 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
- Powtórka encoding/json
- encoding/xml
- encoding/csv
- gob i kodowanie binarne