0Pricing
Go Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Protocol Buffers и .proto-файлы
  2. Реализация унарного сервиса gRPC
  3. Потоковая передача между сервером и клиентом
  4. Перехватчики и метаданные gRPC
← Назад к Go Academy