Protocol Buffers i pliki .proto
Typy komunikatów, usługi i generowanie kodu przez protoc
Protocol Buffers i pliki .proto to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 1 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 są Protocol Buffers?
Protocol Buffers (protobuf) to niezależny od języka, binarny format serializacji opracowany przez Google. Jest mniejszy i szybszy niż JSON oraz stanowi kanoniczny format przewodowy dla gRPC.
Składnia pliku .proto
W pliku .proto należy zdefiniować komunikaty i usługi:
syntax = "proto3";
package user;
option go_package = "github.com/example/user/pb";
message User {
int64 id = 1;
string name = 2;
string email = 3;
}
service UserService {
rpc GetUser (GetUserRequest) returns (User);
}
message GetUserRequest { int64 id = 1; }Numery pól
Każde pole ma unikatowy numer (tag) używany w kodowaniu binarnym. Po użyciu schematu nie wolno zmieniać istniejących numerów pól — powoduje to utratę kompatybilności.
Wartości domyślne proto3
W proto3 wszystkie pola mają wartości domyślne (0 dla liczb, "" dla napisów, false dla wartości bool). Nie ma rozróżnienia na pola required i optional — brakujące pola przyjmują wartość domyślną.
Instalowanie protoc
Należy zainstalować kompilator protobuf oraz wtyczkę dla Go:
brew install protobuf
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latestGenerowanie kodu Go
Należy uruchomić protoc, aby wygenerować struktury Go i szkielety gRPC:
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
user/user.protoTypy generowane automatycznie
protoc generuje: strukturę Go dla każdego komunikatu, metody getter, interfejs usługi, strukturę niezaimplementowanego serwera oraz strukturę klienta ze wszystkimi metodami RPC.
Pola powtarzalne
Należy użyć repeated, aby reprezentować listę (mapowaną na wycinek Go):
message ListUsersResponse {
repeated User users = 1;
}Typy wyliczeniowe
W proto3 można definiować typy wyliczeniowe. Pierwsza wartość musi wynosić 0 (jest to wartość domyślna):
enum Role {
ROLE_UNSPECIFIED = 0;
ROLE_USER = 1;
ROLE_ADMIN = 2;
}Dobrze znane typy
Pakiet google/protobuf udostępnia typowe typy: Timestamp, Duration, Struct (podobny do JSON), Any. Należy zaimportować je w pliku .proto.
import "google/protobuf/timestamp.proto";
message Event { google.protobuf.Timestamp created_at = 1; }Zasady kompatybilności wstecznej
Bezpieczne zmiany: dodawanie nowych pól, dodawanie nowych typów komunikatów, dodawanie nowych wartości typów wyliczeniowych. Niebezpieczne zmiany: zmiana numerów pól, zmiana typów pól, usuwanie pól (po cichu przyjmują wartość domyślną).
Szybki test
Co musi być prawdą w przypadku numerów pól w komunikacie protobuf?
Podsumowanie: Protocol Buffers
Najważniejsze informacje:
- .proto definiuje komunikaty (pola i typy) oraz usługi (RPC)
- Numery pól są stałe — nigdy nie należy ich ponownie używać ani zmieniać
- protoc wraz z wtyczką Go generuje struktury Go i stuby gRPC
- pola repeated → wycinki; wartości enumów muszą zaczynać się od 0
Często zadawane pytania
Czy lekcja „Protocol Buffers i pliki .proto” jest bezpłatna?
Tak — pełny tekst „Protocol Buffers i pliki .proto” 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 „Protocol Buffers i pliki .proto”?
Typy komunikatów, usługi i generowanie kodu przez protoc Ć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 1 z 4.
Ile czasu zajmuje lekcja „Protocol Buffers i pliki .proto”?
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
- Protocol Buffers i pliki .proto
- Implementowanie jednożądaniowej usługi gRPC
- Strumieniowanie po stronie serwera i klienta
- Interceptory gRPC i metadane