duanran8648 2017-05-03 19:58
浏览 516

Protobuf(gRPC)代码生成器,用于创建无效代码

Everything works when I have my proto file defining a service with a streaming response. However when I return a single value, then the generated code is invalid!

Proto File:

syntax = "proto3";

package analyticsServicesGlobal;
option go_package = "generated/analyticsServices";

service HealthCheck {
    rpc Health (HealthCheckParam) returns (HealthCheckPayload) {}
}

message HealthCheckPayload {
    string message = 1;
}

message HealthCheckParam {
    string response = 1;
}

The code generation completes without issue : protoc --go_out=plugins=grpc:$GOPATH/src/gauss minimal.proto

The ide and command line compilation return this error in the generated Go code though:

./minimal.pb.go:130: cannot use handler (type func("gauss/vendor/golang.org/x/net/context".Context, interface {}) (interface {}, error)) as type grpc.UnaryHandler in argument to interceptor
./minimal.pb.go:139: cannot use _HealthCheck_Health_Handler (type func(interface {}, "gauss/vendor/golang.org/x/net/context".Context, func(interface {}) error, grpc.UnaryServerInterceptor) (interface {}, error)) as type grpc.methodHandler in field value

This issue shows up for any service where a non-stream response is returned. I have create this minimal proto file to demonstrate, but every similar service definition has the same issue.

I am on OSX using Go version 1.8.1, protoc version 3.3.0, and the latest protoc plugin for Go go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

I'm sure I'm doing something wrong given the lack of reports on this issue - but I don't see what. Any suggestions are appreciated!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!