美文网首页
使用谷歌标准api时protobuf生成遇到的问题

使用谷歌标准api时protobuf生成遇到的问题

作者: 天地一小儒 | 来源:发表于2020-03-15 14:35 被阅读0次

在vscode时新增proto文件时,按下sr会出现一个快捷生成CRUD服务的例子


srvcrud

然后再protoc生成时发现报如下错误:

map/proto/service.proto:85:3: "FieldMask" is not defined.
map/proto/service.proto:35:44: "google.protobuf.Empty" is not defined.

网上找了一大堆源码,刚开始是直接引入两个的proto文件,地址是:
https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/field_mask.proto
https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/empty.proto

但下载这个库然后再protoc里加入proto_path后又发现报google.api.http找不到的错。
结果偶然在https://github.com/grpc-ecosystem/grpc-gatewayREADME.md上发现需要引入annotations.proto

annotations.proto

引入后又报一个undefined: runtime.CamelCaseFieldMask的错误,查看grpc-gateway网关的源码,发现在1.11.3版本后此方法被删除,怀疑是我本地版本过低的原因,但go install、go get好几次这个gateway的库也是这个错,无奈之下,只能手动在go mod里面降级,不得不说,这里go mod的强大性就体现出来了,改个数字就能降级升级。

go.mod

再重新生成,果然没有任何错误了。完成编译代码如下:

protoc -I$(GOPATH)/src:. -I/usr/local/include -I. \
        -I$(GOPATH)/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.11.2/third_party/googleapis \
        --go_out=plugins=grpc:.  --grpc-gateway_out=logtostderr=true:. \
        --swagger_out=logtostderr=true:. map/proto/service.proto

相关文章

网友评论

      本文标题:使用谷歌标准api时protobuf生成遇到的问题

      本文链接:https://www.haomeiwen.com/subject/oidashtx.html