mustEmbedUnimplemented による gRPC での前方互換性*
gRPC-go ライブラリでは、サーバーでの前方互換性を強化するために、mustEmbedUnimplemented*** メソッドが導入されました。
以前は、gRPC サーバーは必要なメソッドが実装されていない場合、コンパイルは失敗します。これを軽減するために、開発者は、使用することが意図されていない場合でも、実装されていないメソッドを手動で実装する必要がありました。
mustEmbedUnimplemented* は、前方互換性をオプトアウトすることでこの問題を解決します。これは、次のことを意味します。
たとえば、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 サイトの他の関連記事を参照してください。