2017-08-02 274 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