2017-08-02 44 views
1

我想了解有关golang,gRPC和protobuf的良好实践。gRPC服务器错误处理程序golang

我采取以下GRPC服务

service MyService { 
    rpc dosomethink(model.MyModel) returns (model.Model) { 
    option (google.api.http) = { post: "/my/path" body: "" }; 
    } 
} 

我编译protobufs。实际上,protobuf给了我们一个从http到grpc的httpproxy。

的代码来实现这一服务:

import "google.golang.org/grpc/status" 

func (Abcd) Dosomethink(c context.Context, sessionRequest *model.MyModel) (*model.Model, error) { 

    return nil, status.New(400,"Default error message for 400") 
} 

我希望有一个400 HTTP错误(HTTP代理)消息“400默认的错误消息”,消息的工作,但总是HTTP错误是500.

您知道有关此信息的任何文章或文档吗?

回答

1

您需要返回空的model.Model对象,以便protobufs能够正确地序列化消息。

尝试

import "google.golang.org/grpc/status" 

func (Abcd) Dosomethink(c context.Context, sessionRequest *model.MyModel) (*model.Model, error) { 

    return &model.Model{}, status.New(400,"Default error message for 400") 
} 
+0

谢谢你,现在它的工作。 我想添加一条评论,说明如果不是直接使用grpc/codes包中的代码,那么代码将不会直接使用http(200,300,400 ...) – own3dh2so4