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

gRPC の「mustEmbedUnimplemented」はサーバーの前方互換性をどのように強化しますか?

DDD
DDDオリジナル
2024-11-30 11:34:11114ブラウズ

How Does gRPC's `mustEmbedUnimplemented` Enhance Server Forward Compatibility?

mustEmbedUnimplemented による gRPC での前方互換性*

gRPC-go ライブラリでは、サーバーでの前方互換性を強化するために、mustEmbedUnimplemented*** メソッドが導入されました。

以前は、gRPC サーバーは必要なメソッドが実装されていない場合、コンパイルは失敗します。これを軽減するために、開発者は、使用することが意図されていない場合でも、実装されていないメソッドを手動で実装する必要がありました。

mustEmbedUnimplemented* は、前方互換性をオプトアウトすることでこの問題を解決します。これは、次のことを意味します。

  • サーバーは、前方互換性をオプトアウトするには、Unimplemented*** インターフェイスを明示的に埋め込む必要があります。
  • Unimplemented*** を埋め込むことにより、サーバーはコンパイル時に受信しません。メソッドの実装がない場合はエラーになりますが、実装されていないメソッドが存在する場合は実行時に失敗します。

たとえば、GreetService インターフェイスがある場合:

type GreetService interface {
    Greet(ctx context.Context, req *pb.GreetRequest, opts ...gax.CallOption) (*pb.GreetResponse, error)
}

以前は次のように実装していました。

type server struct {...}
func (s *server) Greet(ctx context.Context, req *pb.GreetRequest, opts ...gax.CallOption) (*pb.GreetResponse, error) {...}
func (s *server) MustEmbeddUnimplementedGreetServiceServer() {...}

今回は、mustEmbedUnimplemented を使用します。 ***、Unsafe*** インターフェイスを埋め込むことで、上位互換性をオプトアウトできます代わりに:

type server struct {
    grpc.UnsafeGreetServiceServer
    ...
}

この変更により、柔軟性が向上し、サーバー実装での不要なコードが防止されます。

以上がgRPC の「mustEmbedUnimplemented」はサーバーの前方互換性をどのように強化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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