Ответ
Отладка бинарного формата Protobuf заключается в его преобразовании в человекочитаемый вид. Вот основные способы:
1. Конвертация в текстовый формат
Пакет prototext
позволяет преобразовать Protobuf-сообщение в многострочный текстовый формат, который удобно читать.
import "google.golang.org/protobuf/encoding/prototext"
// msg - ваше protobuf-сообщение
textData, err := prototext.MarshalOptions{Multiline: true}.Marshal(msg)
if err != nil {
// обработка ошибки
}
fmt.Println(string(textData))
2. Конвертация в JSON
JSON — еще один удобный формат для анализа. Пакет protojson
решает эту задачу.
import "google.golang.org/protobuf/encoding/protojson"
// msg - ваше protobuf-сообщение
jsonData, err := protojson.MarshalOptions{Multiline: true, Indent: " "}.Marshal(msg)
if err != nil {
// обработка ошибки
}
fmt.Println(string(jsonData))
3. Использование утилиты protoc
Если у вас есть бинарные данные в файле или из сетевого трафика, можно использовать компилятор protoc
для их декодирования. Для этого нужен .proto
файл со схемой.
# my_message.bin содержит бинарные данные
# schema.proto содержит определение MyMessage
protoc --decode=MyMessage schema.proto < my_message.bin
4. Специализированные инструменты
- grpcurl: Утилита командной строки для взаимодействия с gRPC-сервисами. Позволяет отправлять запросы и просматривать ответы в текстовом виде без написания кода.
- Postman / Insomnia: Современные API-клиенты поддерживают gRPC, позволяя импортировать
.proto
файлы и удобно отлаживать запросы/ответы через GUI.
Важно:
- При отладке всегда проверяйте ошибки, возвращаемые функциями
Unmarshal
, — они часто указывают на несоответствие данных и схемы.