了解 gRPC 中的“mustEmbedUnimplemented”*
最近引入了“mustEmbedUnimplemented*” gRPC-go 中的方法,向前兼容性增强意义。此更改提出了一个问题:此功能如何增强功能并解决之前遇到的挑战?
前向兼容性
在早期版本中,缺少方法实现的 gRPC 服务器将触发编译时错误。这个错误起到了故障保护的作用,防止了不完整的实现。然而,较新版本的 protoc-gen-grpc-go 编译器现在要求服务器通过实现“未实现的*”接口来实现前向兼容。
前向兼容性的好处
向前兼容性提供了多种优点:
嵌入“未实现”*
要嵌入“未实现*”接口,只需添加一个nil 实现到您的服务器结构,如下所示:
type server struct { pdfpb.UnimplementedGreetServiceServer }
这不会导致编译器错误,但任何未实现的方法都会导致运行时“codes.Unimplemented”错误。
选择退出前向兼容性
如果需要,您可以通过以下方式选择退出前向兼容性而是嵌入“不安全”接口。这些接口包括“mustEmbedUnimplemented*”方法,而不需要实际的方法实现。
type FooBarService struct { grpc.UnsafeFooBarServiceServer // other fields }
生成没有前向兼容性的代码
您还可以通过将“require_unimplemented_servers = false”选项传递给protoc-gen-grpc-go 插件:
protoc --go-grpc_out=require_unimplemented_servers=false:.
以上是gRPC 的'mustEmbedUnimplemented*”如何增强前向兼容性和运行时错误处理?的详细内容。更多信息请关注PHP中文网其他相关文章!