生成コードリファレンス
生成コードリファレンス
このページでは、protoc-gen-go-grpc gRPCプラグインを使用して.protoファイルをprotocでコンパイルしたときに生成されるコードについて説明します。この最新バージョンの生成コードは、デフォルトでジェネリクスを使用します。ジェネリクスを使用しない古い生成コードを扱っている場合は、関連ドキュメントをこちらで見つけることができます。この最新バージョンのジェネリクスを使用することを推奨しますが、useGenericStreamsフラグをfalseに設定することで、一時的に古い動作に戻すことができます。
gRPCサービスを.protoファイルで定義する方法については、サービス定義を参照してください。
スレッドセーフティ: クライアント側のRPC呼び出しとサーバー側のRPCハンドラーはスレッドセーフであり、並行ゴルーチンで実行されることを意図しています。ただし、個々のストリームについては、送受信データは双方向ですがシリアルです。したがって、例えば個々のストリームは並行読み取りまたは並行書き込みをサポートしません(ただし、読み取りは書き込みと安全に並行して実行できます)。
生成されたサーバーインターフェースのメソッド
サーバー側では、.protoファイル内の各service Barは、次の関数を生成します。
func RegisterBarServer(s *grpc.Server, srv BarServer)
アプリケーションは、BarServerインターフェースの具体的な実装を定義し、この関数を使用して(サーバーインスタンスを開始する前に)grpc.Serverインスタンスに登録できます。
単項メソッド
これらのメソッドは、生成されたサービスインターフェースで次のシグネチャを持ちます。
Foo(context.Context, *RequestMsg) (*ResponseMsg, error)
このコンテキストでは、RequestMsgはクライアントから送信されるプロトバフメッセージ、ResponseMsgはサーバーから返されるプロトバフメッセージです。
サーバーサイドストリーミングメソッド
これらのメソッドは、生成されたサービスインターフェースで次のシグネチャを持ちます: Foo(*RequestMsg, grpc.ServerStreamingServer[*ResponseMsg]) error
このコンテキストでは、 RequestMsg はクライアントからの単一のリクエストであり、grpc.ServerStreamingServerはResponseMsg型の応答のサーバーからクライアントへのストリームのサーバー側を表します。
詳細な使用方法については、grpc.ServerStreamingServerのドキュメントを参照してください。
クライアントサイドストリーミングメソッド
これらのメソッドは、生成されたサービスインターフェースで次のシグネチャを持ちます。
Foo(grpc.ClientStreamingServer[*RequestMsg, *ResponseMsg]) error
ここで、RequestMsgはストリームのメッセージタイプで、クライアントからサーバーに送信され、ResponseMsgはサーバーからクライアントへの応答のタイプです。
このコンテキストでは、grpc.ClientStreamingServerは、クライアントからサーバーへのメッセージストリームの読み取りと、単一のサーバー応答メッセージの送信の両方に使用できます。
詳細な使用方法については、grpc.ClientStreamingServerのドキュメントを参照してください。
双方向ストリーミングメソッド
これらのメソッドは、生成されたサービスインターフェースで次のシグネチャを持ちます。
Foo(grpc.BidiStreamingServer[*RequestMsg, *ResponseMsg]) error
ここで、RequestMsgはストリームのメッセージタイプで、クライアントからサーバーに送信され、ResponseMsgはサーバーからクライアントへのストリームのタイプです。
このコンテキストでは、grpc.BidiStreamingServerは、クライアントからサーバーへのメッセージストリームとサーバーからクライアントへのメッセージストリームの両方にアクセスするために使用できます。
詳細な使用方法については、grpc.BidiStreamingServerのドキュメントを参照してください。
生成されたクライアントインターフェースのメソッド
クライアント側の使用法では、.protoファイル内の各service Barは、次の関数も生成します: func BarClient(cc *grpc.ClientConn) BarClient。これはBarClientインターフェースの具体的な実装を返します(この具体的な実装も生成された.pb.goファイルにあります)。
単項メソッド
これらのメソッドは、生成されたクライアントスタブで次のシグネチャを持ちます。
(ctx context.Context, in *RequestMsg, opts ...grpc.CallOption) (*ResponseMsg, error)
このコンテキストでは、RequestMsgはクライアントからサーバーへの単一のリクエストであり、ResponseMsgはサーバーから返される応答を含みます。
サーバーサイドストリーミングメソッド
これらのメソッドは、生成されたクライアントスタブで次のシグネチャを持ちます。
Foo(ctx context.Context, in *RequestMsg, opts ...grpc.CallOption) (grpc.ServerStreamingClient[*ResponseMsg], error)
このコンテキストでは、grpc.ServerStreamingClientはResponseMsgメッセージのサーバーからクライアントへのストリームのクライアント側を表します。
詳細な使用方法については、grpc.ServerStreamingClientのドキュメントを参照してください。
クライアントサイドストリーミングメソッド
これらのメソッドは、生成されたクライアントスタブで次のシグネチャを持ちます。
Foo(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[*RequestMsg, *ResponseMsg], error)
このコンテキストでは、grpc.ClientStreamingClientはRequestMsgメッセージのクライアントからサーバーへのストリームのクライアント側を表します。クライアントからサーバーへのメッセージストリームの送信と、単一のサーバー応答メッセージの受信の両方に使用できます。
詳細な使用方法については、grpc.ClientStreamingClientのドキュメントを参照してください。
双方向ストリーミングメソッド
これらのメソッドは、生成されたクライアントスタブで次のシグネチャを持ちます。
Foo(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[*RequestMsg, *ResponseMsg], error)
このコンテキストでは、grpc.BidiStreamingClientは、クライアントからサーバーへのメッセージストリームとサーバーからクライアントへのメッセージストリームの両方を表します。
詳細な使用方法については、grpc.BidiStreamingClientのドキュメントを参照してください。
パッケージと名前空間
protocコンパイラを--go_out=plugins=grpc:で呼び出す場合、protoパッケージからGoパッケージへの変換は、protoc-gen-goプラグインをgrpcプラグインなしで使用する場合と同じように機能します。
たとえば、foo.protoがpackage fooであると宣言している場合、生成されるfoo.pb.goファイルもGoのpackage fooになります。