美文网首页
使用谷歌标准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