英文:
gRPC server error handler golang
问题
我想了解关于使用golang、gRPC和protobuf的最佳实践。
我正在实现以下gRPC服务:
service MyService {
rpc dosomethink(model.MyModel) returns (model.Model) {
option (google.api.http) = { post: "/my/path" body: "" };
}
}
我已经编译了protobuf。实际上,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")
}
我希望在HTTP代理中返回一个400的HTTP错误,错误消息为"Default error message for 400",消息是有效的,但是HTTP错误始终是500。
你知道有关此问题的任何文章或文档吗?
英文:
I want know about good practices with golang and gRPC and protobuf.
I am implementing the following gRPC service
service MyService {
rpc dosomethink(model.MyModel) returns (model.Model) {
option (google.api.http) = { post: "/my/path" body: "" };
}
}
I compiled the protobufs. In fact, the protobuf give us a httpproxy from http to grpc.
The code to implement this service:
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")
}
I want a 400 http error (in the http proxy) with the message "Default error message for 400", the message works, but the http error always is 500.
Do you know any post or doc about this?
答案1
得分: 11
你需要返回一个空的model.Model
对象,以便能够正确序列化消息。
尝试使用以下代码:
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")
}
英文:
You need to return empty model.Model
object in order for protobufs to be able to properly serialise the message.
Try
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")
}
答案2
得分: 11
错误处理程序:
import (
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
...
return data, status.Errorf(
codes.InvalidArgument,
fmt.Sprintf("您的消息", req.data),
)
如果需要更多关于错误处理的信息,请查看以下链接:
https://grpc.io/docs/guides/error.html
英文:
Error Handler:
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
return data, status.Errorf(
codes.InvalidArgument,
fmt.Sprintf("Your message", req.data),
)
For need more info about the error handling take a look below links.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论