Protocol Buffers и .proto-файлы
Типы сообщений, сервисы и генерация кода protoc
«Protocol Buffers и .proto-файлы» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Что такое Protocol Buffers
Protocol Buffers (protobuf) — независимый от языка двоичный формат сериализации, разработанный Google. Он компактнее и быстрее JSON и является каноническим форматом передачи данных для gRPC.
Синтаксис файла .proto
Определяйте сообщения и сервисы в файле .proto:
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; }Номера полей
У каждого поля есть уникальный номер (тег), используемый в двоичном кодировании. Никогда не изменяйте существующие номера полей после начала использования схемы — это нарушит совместимость.
Значения по умолчанию в proto3
В proto3 у всех полей есть значения по умолчанию (0 для чисел, "" для строк, false для логических значений). Различия между обязательными и необязательными полями нет — отсутствующие поля получают значение по умолчанию.
Установка protoc
Установите компилятор protobuf и плагин для 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@latestГенерация кода Go
Запустите protoc, чтобы сгенерировать структуры Go и заглушки gRPC:
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
user/user.protoСгенерированные типы
protoc генерирует структуру Go для каждого сообщения, методы получения значений, интерфейс сервиса, структуру сервера без реализации и структуру клиента со всеми методами RPC.
Повторяющиеся поля
Используйте repeated, чтобы представить список, который преобразуется в срез Go:
message ListUsersResponse {
repeated User users = 1;
}Перечисления
Определяйте перечисления в proto3. Первое значение должно быть равно 0, то есть значению по умолчанию:
enum Role {
ROLE_UNSPECIFIED = 0;
ROLE_USER = 1;
ROLE_ADMIN = 2;
}Хорошо известные типы
Пакет google/protobuf предоставляет распространённые типы: Timestamp, Duration, Struct (похожий на JSON), Any. Импортируйте их в файле .proto.
import "google/protobuf/timestamp.proto";
message Event { google.protobuf.Timestamp created_at = 1; }Правила обратной совместимости
Безопасные изменения: добавление новых полей, новых типов сообщений и новых значений перечислений. Небезопасные изменения: изменение номеров полей и их типов, удаление полей (они незаметно получают значение по умолчанию).
Быстрая проверка
Что должно быть верно относительно номеров полей в сообщении protobuf?
Итоги: Protocol Buffers
Основные моменты:
- .proto определяет сообщения (поля и типы) и сервисы (RPC)
- Номера полей постоянны — никогда не используйте их повторно и не изменяйте их
- protoc и плагин Go создают структуры Go и заглушки gRPC
- поля repeated → срезы; перечисления должны начинаться с 0
Часто задаваемые вопросы
Урок «Protocol Buffers и .proto-файлы» бесплатный?
Да — полный текст урока «Protocol Buffers и .proto-файлы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Protocol Buffers и .proto-файлы»?
Типы сообщений, сервисы и генерация кода protoc Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Protocol Buffers и .proto-файлы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Protocol Buffers и .proto-файлы
- Реализация унарного сервиса gRPC
- Потоковая передача между сервером и клиентом
- Перехватчики и метаданные gRPC