Как правильно описать файл прото? - PullRequest
1 голос
/ 03 мая 2020

Допустим, мы хотим создать такую ​​таблицу в будущем:

CREATE TABLE CITY (
    CITY_ID INT8 UNIQUE NOT NULL,
    FOUNDATION_DATE TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    CITY_NAME VARCHAR NULL,
    CITY_TYPE VARCHAR DEFAULT 'Unknown',
    INVISIBLE BOOL NULL
);

Я пытаюсь создать файл proto, который будет соответствовать и не конфликтовать с этой структурой таблицы. Но, к сожалению, я запутался и мне нужна помощь. Из официальной документации я узнал, что proto3 не имеет возможности указать обязательные и дополнительные поля в message. Я также не могу понять, как указать значения по умолчанию в полях.

На этом этапе я описал следующий файл city.proto:

syntax = "proto3";

import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";

message City {
    google.protobuf.UInt64Value city_id = 1;
    google.protobuf.Timestamp foundation_date = 1;
    google.protobuf.StringValue city_name = 3;
    google.protobuf.StringValue city_type = 4;
    google.protobuf.BoolValue invisible = 5;
}

После генерации кода go с помощью protoc компилятор, мы обычно получаем строго типизированный struct. С помощью пакета GORM я хочу выполнить автоматическую миграцию и создать таблицу на основе этой структуры.

В своем проекте я использую go modules.

I используйте такую ​​команду для генерации go кода:

protoc proto/city.proto -I. -I%GOPATH%/src --go_out=plugins=grpc:proto/city

К сожалению, команда вызывает следующую ошибку:

--go_out: protoc-gen-go: plugins are not supported; use 'protoc --go-grpc_out=...' to generate gRPC

go версия :

go version go1.12.9 windows/amd64

прото c - версия :

libprotoc 3.11.4

ВОПРОС :

Как правильно описать прото файл для нашей таблицы и как правильно сгенерировать go код?

1 Ответ

0 голосов
/ 03 мая 2020

Похоже, нам нужно подождать, пока gRP C люди предоставят его. В примечаниях к выпуску (https://github.com/protocolbuffers/protobuf-go/releases/tag/v1.20.0#v1 .20-grp c -support ) он не поддерживается.

Но я использовал https://github.com/golang/protobuf/releases/tag/v1.4.0-rc.2 и этот новый google.goolang.org/protobuf V1.20.0 вместе. Он генерирует код protobuf/grpc Go, который реализует, например, метод ProtoReflect, и фактически использует этот новый API отражения.

...