検索
ホームページバックエンド開発GolangGo で GRPC を使用するにはどうすればよいですか?

最新のアプリケーションの継続的な開発に伴い、高いパフォーマンスとスケーラビリティに対する要件もますます高まっているため、これらのニーズを満たすために、RPC プロトコルに基づく分散アーキテクチャが存在します。 GRPC は、Google の内部 StuB をベースにしたオープンソース フレームワークです。 GRPC は、アプリケーション間の標準化された通信を効率的に管理するように設計された、プログラミング言語間での通信のための拡張性の高いメカニズムを提供します。

この記事では、Go で GRPC を使用する方法を紹介します。GRPC の概念、GRPC を使用して通信する手順、Go での簡単な GRPC サービスの実装例について説明します。

GRPC

GRPC は、デフォルトのデータシリアル化メソッドとして protobuf を使用する、HTTP/2 に基づく RPC フレームワークです。これは、異なる言語間での通信を簡単に実現できることを意味します (生成されたコードと grpc によって提供されるミドルウェアを活用する)。

拡張性: GRPC は、コード ストリームと接続層で単純および複雑な認証および認可ロジックを実装でき、Kubernetes などの最新のコンピューティング プラットフォームと連携できます。

GRPC を使用した通信

このセクションでは、GRPC を使用して通信するための詳細な手順を紹介します。この記事では、Go 言語を使用して簡単な GRPC サービスを実装します。

ステップ 1: protobuf ファイルを定義する

まず、インターフェイスを宣言するために protobuf ファイルを定義する必要があります。この例では、2 つの数値を加算する単純なサービスを定義します。 .proto ファイルの内容は次のとおりです。

syntax = "proto3";

option go_package = ".;main";

package calculator;

message AddRequest {
    int32 x = 1;
    int32 y = 2;
}

message AddResponse {
    int32 result = 1;
}

service Calculator {
    rpc Add(AddRequest) returns (AddResponse);
}

この protobuf ファイルでは、AddRequest と AddResponse という 2 つのメッセージと、引数として 2 つの数値を受け取る Add メソッドを提供するサービス インターフェイス Calculator を定義します。そしてそれらの合計を返します。

ステップ 2: GO コードを生成する

次に、protoc ツールを使用して GO コードを生成する必要があります。次の方法でコードを生成できます。

protoc --go_out=plugins=grpc:. *.proto

このコマンドは、定義したサービスとメッセージの GO コードを含む calculator.pb.go ファイルを生成します。

ステップ 3: サーバー側の実装

サーバー側では、定義したインターフェイスのサービスを実装する必要があります。私たちの場合、サービスは 2 つの数値を加算してその合計を返す単純な加算サービスです。以下はサーバー コードです:

package main

import (
    "context"
    "net"
    "google.golang.org/grpc"
    pb "github.com/calculator"
)

type server struct{}

func (s *server) Add(ctx context.Context, req *pb.AddRequest) (*pb.AddResponse, error) {
    result := req.X + req.Y
    return &pb.AddResponse{Result:result}, nil
}

func main() {
    l, err := net.Listen("tcp", ":8080")
    if err != nil {
        panic(err)
    }
    s := grpc.NewServer()

    pb.RegisterCalculatorServer(s, &server{})

    err = s.Serve(l)
    if err != nil {
        panic(err)
    }
}

最初に「server」という名前の構造体を定義し、それに Add メソッドを追加します。このメソッドは 2 つの数値 x と y を受け取り、それらの合計を計算し、応答オブジェクトとして AddResponse を返します。

また、新しい grpc サービスを作成し、それをポート 8080 のローカル アドレスにバインドする main 関数も定義します。また、定義したサービスを grpc サーバーに挿入し、grpc サーバーを起動します。

ステップ 4: クライアントを実装する

最後に、サーバーにリクエストを送信し、レスポンスを受信できるクライアント コードを作成する必要があります。クライアント側コードとサーバー側コードの .proto ファイルは一致する必要があることに注意してください。以下はクライアント コードです:

package main

import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    pb "github.com/calculator"
)

func main() {
    conn, err := grpc.Dial(":8080", grpc.WithInsecure())
    if err != nil {
        panic(err)
    }

    client := pb.NewCalculatorClient(conn)

    req := pb.AddRequest{X:2, Y:3}
    resp, err := client.Add(context.Background(), &req)
    if err != nil {
        panic(err)
    }

    fmt.Printf("Result: %d", resp.Result)
}

このクライアント コードでは、まず GRPC サーバーへの接続を作成し、次にこの接続を使用して新しいクライアントを作成します。次に、AddRequest を作成し、その値を 2 と 3 に設定して、リクエストをサーバーに送信します。最後に、サーバーの応答を受信して​​出力します。

サンプル コードの実行方法

サンプル コードを実行するには、まず Go 開発環境をセットアップし、関連する依存関係をインストールする必要があります。コード パッケージの名前が main であるとします。サンプル コードをローカルで実行するには、最初に次のコマンドを実行する必要があります:

go get -u google.golang.org/grpc
go get -u github.com/golang/protobuf/protoc-gen-go

次に、protoc コマンドを実行して go コードを生成します:

protoc --go_out=plugins=grpc:. *.proto

次に、サービスとクライアントのコードをコンパイルし、コンパイルします。それぞれを開始します:

go build server.go
go build client.go
./server
./client

すべてがうまくいけば、クライアントは追加リクエストを GRPC サーバーに送信し、結果が 5 として表示されます。

結論

この記事では、Go 言語で GRPC を使用する方法を紹介します。最初に GRPC の概念について説明し、次に protobuf を使用してインターフェイス仕様を定義する方法、GO コードを生成する方法、および単純な GRPC サービスを実装する方法を示しました。これらの手順を使用すると、Go で GRPC の使用を開始し、高性能でスケーラブルな分散システムを実装できます。

以上がGo で GRPC を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はなしで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Golang and Python:違いを理解するGolang and Python:違いを理解するApr 18, 2025 am 12:21 AM

GolangとPythonの主な違いは、並行性モデル、タイプシステム、パフォーマンス、実行速度です。 1. GolangはCSPモデルを使用します。これは、同時タスクの高いタスクに適しています。 Pythonは、I/O集約型タスクに適したマルチスレッドとGILに依存しています。 2。Golangは静的なタイプで、Pythonは動的なタイプです。 3.ゴーランコンパイルされた言語実行速度は高速であり、Python解釈言語開発は高速です。

Golang vs. C:速度差の評価Golang vs. C:速度差の評価Apr 18, 2025 am 12:20 AM

Golangは通常Cよりも遅くなりますが、Golangはプログラミングと開発効率の同時により多くの利点があります。1)Golangのゴミ収集と並行性モデルにより、同時性の高いシナリオではうまく機能します。 2)Cは、手動のメモリ管理とハードウェアの最適化により、より高いパフォーマンスを取得しますが、開発の複雑さが高くなります。

Golang:クラウドコンピューティングとDevOpsのキー言語Golang:クラウドコンピューティングとDevOpsのキー言語Apr 18, 2025 am 12:18 AM

GolangはクラウドコンピューティングとDevOpsで広く使用されており、その利点はシンプルさ、効率性、および同時プログラミング機能にあります。 1)クラウドコンピューティングでは、GolangはGoroutineおよびチャネルメカニズムを介して同時リクエストを効率的に処理します。 2)DevOpsでは、Golangの高速コンピレーションとクロスプラットフォーム機能により、自動化ツールの最初の選択肢になります。

Golang and C:実行効率の理解Golang and C:実行効率の理解Apr 18, 2025 am 12:16 AM

GolangとCにはそれぞれ、パフォーマンス効率に独自の利点があります。 1)GolangはGoroutineおよびGarbage Collectionを通じて効率を向上させますが、一時停止時間を導入する場合があります。 2)Cは、手動のメモリ管理と最適化を通じて高性能を実現しますが、開発者はメモリリークやその他の問題に対処する必要があります。選択するときは、プロジェクトの要件とチームテクノロジースタックを考慮する必要があります。

Golang vs. Python:並行性とマルチスレッドGolang vs. Python:並行性とマルチスレッドApr 17, 2025 am 12:20 AM

Golangは高い並行性タスクにより適していますが、Pythonには柔軟性がより多くの利点があります。 1.Golangは、GoroutineとChannelを介して並行性を効率的に処理します。 2。Pythonは、GILの影響を受けるが、複数の並行性メソッドを提供するスレッドとAsyncioに依存しています。選択は、特定のニーズに基づいている必要があります。

GolangとC:パフォーマンスのトレードオフGolangとC:パフォーマンスのトレードオフApr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

Golang vs. Python:アプリケーションとユースケースGolang vs. Python:アプリケーションとユースケースApr 17, 2025 am 12:17 AM

seetgolangforhighperformance andconcurrency、ithyforbackendservicesandnetworkプログラミング、selectthonforrapiddevelopment、datascience、andmachinelearningduetoistsversitydextentextensextensentensiveLibraries。

Golang vs. Python:重要な違​​いと類似点Golang vs. Python:重要な違​​いと類似点Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール