首页 >后端开发 >Golang >gRPC 的'mustEmbedUnimplemented”方法是什么以及它如何确保前向兼容性?

gRPC 的'mustEmbedUnimplemented”方法是什么以及它如何确保前向兼容性?

Susan Sarandon
Susan Sarandon原创
2024-11-30 17:59:09966浏览

What is gRPC's `mustEmbedUnimplemented` Method and How Does it Ensure Forward Compatibility?

了解gRPC的mustEmbedUnimplemented方法*

在最近的更新中,gRPC-go引入了mustEmbedUnimplemented* 方法以确保其向前兼容性服务器。但它到底是做什么的?

在 MustEmbedUnimplemented*

之前,注册服务器实现需要直接注册它,如下所示:

        pb.RegisterFooBarServiceServer(
            server,
            &FooBarServer{}, // or whatever you use to construct the server impl
        )

如果服务器缺少某些方法的实现,会导致运行时出错

引入 MustEmbedUnimplemented*

使用更新的 protoc-gen-grpc-go 编译器,前向兼容性成为默认值。这意味着:

  1. 强制必须EmbedUnimplementedFooBarServiceServer: 在服务器实现中包含此语句可以防止在未显式实现新方法时出现编译时错误。但是,如果调用未实现的方法,则会触发运行时错误(code.Unimplemented)。
  2. 使用 Unsafe FooBarServiceServer 选择退出: 开发人员可以通过嵌入 UnsafeFooBarServiceServer 来选择退出向前兼容性。该接口合并了 MustEmbedUnimplementedFooBarServiceServer() 方法,消除了编译时错误,同时仍然允许显式实现新的处理程序。

配置前向兼容性

此外,使用时可以通过设置以下选项来禁用向前兼容性protoc-gen-grpc-go:

protoc --go-grpc_out=require_unimplemented_servers=false:.

好处

mustEmbedUnimplemented*确保服务器始终向前兼容,防止导致意外错误通过未实现的方法。通过选择退出 Unsafe FooBarServiceServer,开发人员可以保持向后兼容性,同时仍然遵守前向兼容性原则。

以上是gRPC 的'mustEmbedUnimplemented”方法是什么以及它如何确保前向兼容性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn