> Что такое protobuf и как он используется в gRPC (Go)
Уровень: junior · Роль: backend · Категория: Технические вопросы
Компании: Ozon
Стек: Go
> Пример ответа
Protobuf (Protocol Buffers) - это бинарный формат сериализации данных, разработанный Google. В отличие от JSON или XML, он компактнее и быстрее, так как данные кодируются в бинарный вид по строгой схеме. В gRPC protobuf используется как язык описания интерфейсов (IDL) и формат обмена сообщениями.
В Go-проекте с gRPC работа строится так:
- Определяем сервис и сообщения в
.protoфайле, например:
syntax = "proto3"; package example; service UserService { rpc GetUser (UserRequest) returns (UserResponse); } message UserRequest { int32 id = 1; } message UserResponse { string name = 2; string email = 3; }
-
Генерируем Go-код с помощью
protocи плагинаprotoc-gen-go-grpc. Получаем интерфейсы сервера и клиента, а также структуры для сообщений. -
На сервере реализуем сгенерированный интерфейс:
GOtype userServer struct {pb.UnimplementedUserServiceServer}func (s *userServer) GetUser(ctx context.Context, req *pb.UserRequest) (*pb.UserResponse, error) {// логика получения пользователяreturn &pb.UserResponse{Name: "Alice", Email: "alice@example.com"}, nil}
- На клиенте создаём gRPC-соединение и вызываем метод:
GOconn, _ := grpc.Dial("localhost:50051", grpc.WithInsecure())client := pb.NewUserServiceClient(conn)resp, _ := client.GetUser(context.Background(), &pb.UserRequest{Id: 1})
Protobuf обеспечивает строгую типизацию, автоматическую сериализацию/десериализацию и обратную совместимость схем, что критично для микросервисной архитектуры на Go.
> Похожие задачи по backend
Как расследовать проблему медленной работы сервиса и какие метрики и инструменты использовать
Как устроена передача сообщений в gRPC
Как клиенты на разных языках используют протокол gRPC
Как сервер и клиент используют proto-файл в gRPC
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью