Unary gRPCサービスの実装
grpc-goによるサーバーとクライアント
「Unary gRPCサービスの実装」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
unary RPCとは
unary RPCは最も単純なgRPCのパターンです。クライアントが1つのリクエストを送信し、1つのレスポンスを受け取ります。ネットワーク越しに通常の関数を呼び出す場合と似ています。
サーバーの実装
生成されたインターフェースを実装します。前方互換性を確保するため、Unimplemented*Server構造体を埋め込みます:
type userServer struct {
pb.UnimplementedUserServiceServer
db *sql.DB
}
func (s *userServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
// query DB
return &pb.User{Id: req.Id, Name: "Alice"}, nil
}サーバーの起動
gRPCサーバーを作成し、実装を登録して、TCPポートで待ち受けます:
lis, _ := net.Listen("tcp", ":50051")
grpcSrv := grpc.NewServer()
pb.RegisterUserServiceServer(grpcSrv, &userServer{})
log.Fatal(grpcSrv.Serve(lis))クライアント接続
サーバーにダイヤルし、クライアントスタブを作成します:
conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { log.Fatal(err) }
defer conn.Close()
client := pb.NewUserServiceClient(conn)unary呼び出しの実行
ローカル関数であるかのように、クライアントスタブ上のRPCメソッドを呼び出します:
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
user, err := client.GetUser(ctx, &pb.GetUserRequest{Id: 42})
if err != nil { log.Fatalf("error: %v", err) }
fmt.Println(user.Name)エラー処理
gRPCではステータスコードを使用します。status.Errorfでエラーを返し、status.Code(err)で確認します:
import "google.golang.org/grpc/status"
import "google.golang.org/grpc/codes"
// Server:
return nil, status.Errorf(codes.NotFound, "user %d not found", req.Id)
// Client:
if status.Code(err) == codes.NotFound { /* handle */ }コンテキストの伝播
クライアントのRPC呼び出しに渡したコンテキストは、デッドラインとキャンセルをサーバーに伝播します。サーバーでは、そのコンテキストを下流の呼び出し(DBや他のRPC)にも渡す必要があります。
本番環境向けのTLS
本番環境では、安全でない認証情報をTLSに置き換えます:
creds, _ := credentials.NewServerTLSFromFile("cert.pem", "key.pem")
grpcSrv := grpc.NewServer(grpc.Creds(creds))UnimplementedServer
pb.UnimplementedXxxServerを埋め込むと、すべてのRPCメソッドに対してUnimplementedステータスを返すスタブ実装が提供されます。これにより、実装前の新しいRPCをprotoに追加しても、サーバーをコンパイルできます。
grpc.Dialとgrpc.NewClient
grpc.Dialは新しいバージョンでは非推奨です。接続をすぐには確立せず、最初のRPC呼び出し時に遅延して確立するgrpc.NewClientを使用してください。
リフレクションサービス
gRPCリフレクションサービスを登録すると、.protoファイルがなくてもgrpcurlなどのツールで利用可能なサービスを調べられるようになります:
reflection.Register(grpcSrv)クイックチェック
gRPCサーバーの構造体にpb.UnimplementedXxxServerを埋め込む目的は何ですか?
復習:unary gRPC
重要なポイント:
- 生成されたインターフェースを実装し、UnimplementedServerを埋め込みます
- grpc.NewServer()でサーバーを作成し、TCPリスナーに登録してServeします
- クライアントではgrpc.NewClientと生成されたNewXxxClientを使用します
- gRPCのエラー処理にはstatus.Errorf/status.Codeを使用します
AI チューターと学ぶ Go — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 51
- レッスン
- 203
よくある質問
「Unary gRPCサービスの実装」レッスンは無料ですか?
はい。「Unary gRPCサービスの実装」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「Unary gRPCサービスの実装」で何を学びますか?
grpc-goによるサーバーとクライアント ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Unary gRPCサービスの実装」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。