> Что такое protobuf и как он используется в gRPC (Go)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: Ozon

Стек: Go

> Пример ответа

Protobuf (Protocol Buffers) - это бинарный формат сериализации данных, разработанный Google. В отличие от JSON или XML, он компактнее и быстрее, так как данные кодируются в бинарный вид по строгой схеме. В gRPC protobuf используется как язык описания интерфейсов (IDL) и формат обмена сообщениями.

В Go-проекте с gRPC работа строится так:

  1. Определяем сервис и сообщения в .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;
}
  1. Генерируем Go-код с помощью protoc и плагина protoc-gen-go-grpc. Получаем интерфейсы сервера и клиента, а также структуры для сообщений.

  2. На сервере реализуем сгенерированный интерфейс:

GO
type 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
}
  1. На клиенте создаём gRPC-соединение и вызываем метод:
GO
conn, _ := grpc.Dial("localhost:50051", grpc.WithInsecure())
client := pb.NewUserServiceClient(conn)
resp, _ := client.GetUser(context.Background(), &pb.UserRequest{Id: 1})

Protobuf обеспечивает строгую типизацию, автоматическую сериализацию/десериализацию и обратную совместимость схем, что критично для микросервисной архитектуры на Go.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью