生成コードリファレンス

生成コードリファレンス

このページでは、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.ServerStreamingServerResponseMsg型の応答のサーバーからクライアントへのストリームのサーバー側を表します。

詳細な使用方法については、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.ServerStreamingClientResponseMsgメッセージのサーバーからクライアントへのストリームのクライアント側を表します。

詳細な使用方法については、grpc.ServerStreamingClientのドキュメントを参照してください。

クライアントサイドストリーミングメソッド

これらのメソッドは、生成されたクライアントスタブで次のシグネチャを持ちます。

Foo(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[*RequestMsg, *ResponseMsg], error)

このコンテキストでは、grpc.ClientStreamingClientRequestMsgメッセージのクライアントからサーバーへのストリームのクライアント側を表します。クライアントからサーバーへのメッセージストリームの送信と、単一のサーバー応答メッセージの受信の両方に使用できます。

詳細な使用方法については、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.protopackage fooであると宣言している場合、生成されるfoo.pb.goファイルもGoのpackage fooになります。