Допустим, мы хотим создать такую таблицу в будущем:
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 код?