Ответ
По умолчанию gRPC использует Protocol Buffers (Protobuf).
Это бинарный, строго типизированный и расширяемый протокол сериализации данных, разработанный Google. Схема данных описывается в специальных .proto
-файлах.
Ключевые преимущества перед текстовыми форматами (JSON, XML):
- Эффективность: Бинарный формат значительно компактнее и требует меньше ресурсов CPU для парсинга, что ускоряет передачу данных.
- Строгая типизация: Схема в
.proto
-файлах обеспечивает проверку типов на этапе компиляции, снижая количество ошибок в рантайме. - Автогенерация кода: Инструмент
protoc
автоматически генерирует код для работы с данными (структуры, методы сериализации/десериализации) на разных языках, включая Go. - Обратная совместимость: Protobuf позволяет легко добавлять новые поля в сообщения, не нарушая работу старых клиентов.
Пример .proto
-файла:
syntax = "proto3";
package user;
option go_package = "/userpb";
message User {
string name = 1;
int32 age = 2;
repeated string roles = 3; // Повторяющееся поле (слайс в Go)
}
Команда для генерации Go-кода:
protoc --go_out=. --go-grpc_out=. path/to/your.proto
Хотя gRPC теоретически может работать и с другими форматами (например, JSON), Protobuf является его нативным и наиболее распространенным выбором.