【问题标题】:How correctly describe a proto file?如何正确描述 proto 文件?
【发布时间】:2020-05-03 15:23:54
【问题描述】:

假设我们将来要创建这样的表:

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;
}

通过protoc编译器生成go代码后,我们通常会得到一个强类型的struct。在GORM包的帮助下,我想进行自动迁移并基于这个结构创建一个表。

在我的项目中,我使用go modules

我使用这样的命令来生成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

protoc --version

libprotoc 3.11.4

问题

如何正确描述我们表的proto文件以及如何正确生成go代码?

【问题讨论】:

  • 把这个--go_out=plugins=grpc改成这个--go-grpc_out=
  • 我已经试过了。不幸的是,我看到以下错误:--go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1.。您还有其他想法吗?

标签: go protocol-buffers grpc proto


【解决方案1】:

看起来我们需要等待 gRPC 人员提供它。不支持在发行说明 (https://github.com/protocolbuffers/protobuf-go/releases/tag/v1.20.0#v1.20-grpc-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。

【讨论】:

  • 感谢您提供的信息。事实上,我对所有这些依赖项感到困惑。现在我使用github.com/golang/protobuf1.4.0 版本,它是在您在帖子中提到的预发布版本之后发布的。是否有任何替代方法可以更详细地描述 proto 文件?我找到了这样的第三方实现github.com/gogo/protobuf,但我不确定是否应该使用它。
  • 是的,现在的工具还不够棒。它可用,但设置起来有点复杂
  • 我能够使用 github.com/gogo/protobuf 包使用以下命令生成 go 代码:protoc -I. -I%GOPATH%/src --gofast_out=plugins=grpc:. proto/city.proto。但是还没有人回答我的主要问题。我的 proto 文件在多大程度上完全反映了我在帖子中指定的表结构?您对此有何看法?
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 2021-12-26
  • 2015-10-09
  • 1970-01-01
相关资源
最近更新 更多