在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
引入后又报一个undefined: runtime.CamelCaseFieldMask
的错误,查看grpc-gateway网关的源码,发现在1.11.3版本后此方法被删除,怀疑是我本地版本过低的原因,但go install、go get好几次这个gateway的库也是这个错,无奈之下,只能手动在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
网友评论