首页 >后端开发 >Golang >gRPC-go 中的'mustEmbedUnimplemented*”如何确保服务器实现的前向兼容性?

gRPC-go 中的'mustEmbedUnimplemented*”如何确保服务器实现的前向兼容性?

DDD
DDD原创
2024-11-29 12:40:111076浏览

How Does `mustEmbedUnimplemented*` in gRPC-go Ensure Forward Compatibility for Server Implementations?

MustEmbedUnimplemented* gRPC 中用于前向兼容性的方法

grpc-go 最近引入了 MustEmbedUnimplemented* 方法来确保服务器实现中的前向兼容性。以前,服务器实现可以注册服务,而无需实现原型定义中定义的所有方法。这导致添加到原型的新方法会由于服务器中缺少实现而导致编译时错误。

使用 MustEmbedUnimplemented* 方法:

  • 前向兼容性:服务器实现现在必须嵌入未实现*ServiceServer,允许添加新方法而不会出现编译时错误。但是,任何尝试调用未实现的方法都会导致代码出现运行时错误。未实现。
  • 选择退出:开发人员可以通过嵌入 Unsafe*ServiceServer 代替。这将避免运行时错误,但会在未实现方法的情况下保留编译时错误。

例如:

// Implements gRPC FooBarServiceServer
type FooBarService struct {
    grpc.UnsafeFooBarServiceServer // Opt out of forward compatibility
    // other fields
}

要禁用代码生成中的前向兼容性:

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

mustEmbedUnimplemented* 方法确保服务器实现始终保持最新的原型定义,防止潜在的不一致。它提供了一种优雅的方式来添加新方法,而不会破坏现有代码,同时仍然保持向后兼容性。

以上是gRPC-go 中的'mustEmbedUnimplemented*”如何确保服务器实现的前向兼容性?的详细内容。更多信息请关注PHP中文网其他相关文章!

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