ホームページ >バックエンド開発 >Golang >gRPC-go の「mustEmbedUnimplemented*」はサーバー実装の前方互換性をどのように保証しますか?

gRPC-go の「mustEmbedUnimplemented*」はサーバー実装の前方互換性をどのように保証しますか?

DDD
DDDオリジナル
2024-11-29 12:40:111100ブラウズ

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

MustEmbedUnimplemented* 前方互換性のための gRPC のメソッド

grpc-go は最近、mustEmbedUnimplemented* メソッドを導入しました。サーバー実装における上位互換性。以前は、サーバー実装は、プロト定義で定義されたすべてのメソッドを実装しなくてもサービスを登録できました。これにより、プロトに新しいメソッドが追加されると、サーバーに実装がないためにコンパイル時エラーが発生するケースが発生しました。

mustEmbedUnimplemented* メソッドの場合:

  • 上位互換性: サーバー実装に埋め込む必要があります未実装の*ServiceServer。コンパイル時エラーなしで新しいメソッドを追加できます。ただし、実装されていないメソッドを呼び出そうとすると、 code.Unimplemented.
  • オプトアウト による実行時エラーが発生します。開発者は、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。