🏓
【Go】gRPC-connectでEmpty型を使ってみた
概要
gRPCでは、リクエストやレスポンスで特に使用する値が不要な場合、Empty型が用意されています。
今回はgo言語のgRPC-connectで、このEmpty型を使ってみたので実装内容を紹介します。
Empty型について
Protobuf RPC Service method without parametersの記事にある通り、gRPCではではEmptyを表現するgoogle.protobuf.Empty
が用意されています。今回はこれを使用してみます。
実装サンプル
まずはprotoファイルです。リクエストとレスポンスでそれぞれEmpty型を設定するrpcを用意します。
syntax = "proto3";
import "google/protobuf/empty.proto";
package sample;
service SampleyService {
rpc SampleRequetEmptyRpc(google.protobuf.Empty) returns (SampleResponse) {} // リクエストの型内容は記載を割愛
rpc SampleResponseEmptyRpc(SampleRequest) returns (google.protobuf.Empty) {} // レスポンスの型内容は記載を割愛
}
リクエストが空の場合のserverの実装です。
import (
"context"
sample "sample/src/gen/proto"
"github.com/bufbuild/connect-go"
"google.golang.org/protobuf/types/known/emptypb"
)
func (s *SampleyServer) SampleRequetEmptyRpc(
ctx context.Context,
req *connect.Request[emptypb.Empty],
) (*connect.Response[sample.SampleResponse], error) {
// 処理内容は記載を割愛
return connect.NewResponse(&sample.SampleResponse{}), nil
}
レスポンスが空の場合のserverの実装です。
import (
"context"
sample "sample/src/gen/proto"
"github.com/bufbuild/connect-go"
"google.golang.org/protobuf/types/known/emptypb"
)
func (s *SampleyServer) SampleResponseEmptyRpc(
ctx context.Context,
req *connect.Request[sample.SampleRequest],
) (*connect.Response[emptypb.Empty], error) {
// 処理内容は記載を割愛
return connect.NewResponse(&emptypb.Empty{}), nil
}
Discussion