9

我想了解 golang 和 gRPC 以及 protobuf 的良好实践。

我正在实现以下 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 的默认错误消息”的 400 http 错误(在 http 代理中),该消息有效,但 http 错误始终为 500。

您知道有关此的任何帖子或文档吗?

4

2 回答 2

9

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

尝试

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

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

   return &model.Model{}, status.Error(400,"Default error message for 400")
}
于 2017-08-02T10:12:42.553 回答
8

错误处理程序:

"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
return data, status.Errorf(
            codes.InvalidArgument,
            fmt.Sprintf("Your message", req.data),
        )

如需有关错误处理的更多信息,请查看以下链接。

https://grpc.io/docs/guides/error.html

http://avi.im/grpc-errors/

于 2019-01-25T09:23:57.243 回答