gRPC は、Google によって開発され、オープンソース化された、高性能、多用途のオープンソース RPC フレームワークです。 gRPC は、Golang を含む複数のプログラミング言語をサポートしています。この記事ではgRPC Golangの使い方を紹介します。
1. gRPC のインストール
gRPC Golang を開発する前に、まず gRPC をインストールする必要があります。次のコマンドでインストールできます:
go get -u google.golang.org/grpc
インストールが完了したら、gRPC の Go 言語コード ジェネレーター protoc-gen-go もインストールする必要があります。これは次のコマンドでインストールできます:
go get -u github.com/golang/protobuf/protoc-gen-go
2. .proto ファイルの作成
gRPC Golang を開発に使用する前に、まず .proto ファイルを定義する必要があります。 .proto ファイルは、サービス インターフェイスとメッセージ形式を定義します。以下は、.proto ファイルの例です。
syntax = "proto3"; package helloworld; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
.proto 内 ファイルを定義したら、protoc ツールを使用して Go 言語コードを生成する必要があります。次のコマンドで生成できます。
protoc -I helloworld/ helloworld/helloworld.proto --go_out=plugins=grpc:helloworld
生成された Go 言語コードは、指定されたディレクトリ helloworld に保存されます。
4. サーバーの実装
Go 言語コードを生成した後、サービスを実装する必要があります。以下は、SayHello メソッドを実装するサービスの例です。
package main import ( "context" "fmt" "net" "google.golang.org/grpc" pb "github.com/your_username/helloworld" ) const ( port = ":50051" ) type server struct{} func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{Message: "Hello " + in.Name}, nil } func main() { lis, err := net.Listen("tcp", port) if err != nil { fmt.Printf("failed to listen: %v", err) return } s := grpc.NewServer() pb.RegisterGreeterServer(s, &server{}) fmt.Printf("server listening at %v", lis.Addr()) if err := s.Serve(lis); err != nil { fmt.Printf("failed to serve: %v", err) } }SayHello メソッドを実装するサーバー構造
package main import ( "context" "log" "os" "time" "google.golang.org/grpc" pb "github.com/your_username/helloworld" ) const ( address = "localhost:50051" defaultName = "world" ) func main() { // Set up a connection to the server. conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithTimeout(10*time.Second)) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() c := pb.NewGreeterClient(conn) // Contact the server and print out its response. name := defaultName if len(os.Args) > 1 { name = os.Args[1] } ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name}) if err != nil { log.Fatalf("could not greet: %v", err) } log.Printf("Greeting: %s", r.Message) }
grpc.Dial メソッドを使用して接続を作成します
#GreeterClient オブジェクトを作成します cgo build -o server ./server/main.go go build -o client ./client/main.go
サーバー プログラムを実行する:
./server
クライアント プログラムを実行する:
./client
7. まとめ
この記事では、gRPC Golang の使用方法を紹介します。これには、gRPC と protoc-gen-go のインストールが含まれ、.proto ファイルの作成、Go 言語コードの生成、サーバーとクライアントの実装、そして最後にプログラムのコンパイルと実行が行われます。 gRPC Golang は、分散システム内のサービス間の通信に使用できる、高性能で汎用性の高い RPC フレームワークを提供します。
以上がgRPC Golangの使い方を紹介した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。