クイックスタート
このガイドでは、シンプルな動作する例でGoのgRPCの始め方を説明します。
クイックスタート
前提条件
Go、最新のメジャーリリース2つのいずれか。Goの最新メジャーリリース2つ。
インストール手順については、Goのはじめにガイドを参照してください。
Protocol buffer コンパイラ、
protoc、バージョン3。インストール手順については、Protocol Buffer Compiler Installation を参照してください。
Protocol Compiler 用のGoプラグイン
以下のコマンドを使用して、Protocol Compiler 用のGoプラグインをインストールします。
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latestprotocコンパイラがプラグインを見つけられるように、PATHを更新してください。export PATH="$PATH:$(go env GOPATH)/bin"
サンプルコードを取得する
サンプルコードは grpc-go リポジトリの一部です。
リポジトリをzipファイルとしてダウンロード して展開するか、リポジトリをクローンしてください。
git clone -b v1.74.2 --depth 1 https://github.com/grpc/grpc-goクイックスタートのサンプルディレクトリに移動します。
cd grpc-go/examples/helloworld
サンプルを実行する
examples/helloworld ディレクトリから
サーバーコードをコンパイルして実行します。
go run greeter_server/main.go別のターミナルで、クライアントコードをコンパイルして実行し、クライアントの出力を確認します。
go run greeter_client/main.go Greeting: Hello world
おめでとうございます!gRPCを使用したクライアント・サーバーアプリケーションを実行できました。
gRPCサービスを更新する
このセクションでは、追加のサーバーメソッドをアプリケーションに追加します。gRPCサービスは protocol buffers を使用して定義されます。.proto ファイルでサービスを定義する方法の詳細については、Basics tutorial を参照してください。現時点では、サーバーとクライアントスタブの両方に、クライアントからの HelloRequest パラメータを受け取り、サーバーからの HelloReply を返す SayHello() RPCメソッドがあり、そのメソッドは次のように定義されていることを知っておけば十分です。
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
helloworld/helloworld.proto を開いて、同じリクエストとレスポンスタイプで新しい SayHelloAgain() メソッドを追加します。
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
// Sends another greeting
rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
ファイルを保存してください!
gRPCコードを再生成する
新しいサービスメソッドを使用する前に、更新された .proto ファイルを再コンパイルする必要があります。
examples/helloworld ディレクトリにいる状態で、以下のコマンドを実行します。
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
helloworld/helloworld.proto
これにより、helloworld/helloworld.pb.go および helloworld/helloworld_grpc.pb.go ファイルが再生成され、これには以下が含まれます。
HelloRequestおよびHelloReplyメッセージタイプの入力、シリアル化、取得のためのコード。- 生成されたクライアントおよびサーバーコード。
アプリケーションを更新して実行する
サーバーおよびクライアントコードは再生成されましたが、サンプルアプリケーションの人間が書いた部分で新しいメソッドを実装し、呼び出す必要があります。
サーバーを更新する
greeter_server/main.go を開いて、以下の関数を追加します。
func (s *server) SayHelloAgain(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello again " + in.GetName()}, nil
}
クライアントを更新する
greeter_client/main.go を開いて、main() 関数の本体の末尾に以下のコードを追加します。
r, err = c.SayHelloAgain(ctx, &pb.HelloRequest{Name: *name})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", r.GetMessage())
変更を保存してください。
実行!
以前と同様にクライアントとサーバーを実行します。examples/helloworld ディレクトリから以下のコマンドを実行します。
サーバーを実行する
go run greeter_server/main.go別のターミナルでクライアントを実行します。今回は、コマンドライン引数として名前を追加します。
go run greeter_client/main.go --name=Alice以下の出力が表示されます。
Greeting: Hello Alice Greeting: Hello again Alice
次は何をするか
- gRPCの仕組みをgRPCの紹介とコアコンセプトで学習してください。
- 「基本チュートリアル」を完了してください。
- APIリファレンス(APIリファレンス)を探索してください。