首页 > 后端开发 > Golang > gRPC 的'mustEmbedUnimplemented*”如何增强前向兼容性和运行时错误处理?

gRPC 的'mustEmbedUnimplemented*”如何增强前向兼容性和运行时错误处理?

Patricia Arquette
发布: 2024-12-05 14:56:11
原创
907 人浏览过

How Does gRPC's

了解 gRPC 中的“mustEmbedUnimplemented*

最近引入了“mustEmbedUnimplemented*” gRPC-go 中的方法,向前兼容性增强意义。此更改提出了一个问题:此功能如何增强功能并解决之前遇到的挑战?

前向兼容性

在早期版本中,缺少方法实现的 gRPC 服务器将触发编译时错误。这个错误起到了故障保护的作用,防止了不完整的实现。然而,较新版本的 protoc-gen-grpc-go 编译器现在要求服务器通过实现“未实现的*”接口来实现前向兼容。

前向兼容性的好处

向前兼容性提供了多种优点:

  1. 运行时错误处理:不完整的实现现在将在调用时导致运行时错误,而不是停止编译。这可确保方法在调用之前得到实现,从而防止潜在的崩溃。
  2. 分阶段实现:前向兼容性允许逐步实现新方法。尚未准备就绪的实现可以在不触发错误的情况下嵌入,从而允许开发人员优先考虑最关键的实现。

嵌入“未实现*

要嵌入“未实现*”接口,只需添加一个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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板