検索
ホームページバックエンド開発GolangGolang 開発: gRPC を使用して言語を超えたコミュニケーションを実現する方法

Golang 開発: gRPC を使用して言語を超えたコミュニケーションを実現する方法

Golang 開発: gRPC を使用して言語間コミュニケーションを実現する方法

概要:
現代のソフトウェア開発では、異なる言語間のシステム間コミュニケーションが行われます。非常に一般的です。この問題を解決するために、Google は gRPC フレームワークをオープンソース化しました。これは、高性能の言語を超えたリモート プロシージャ コール (RPC) フレームワークです。この記事では、Golang 開発で gRPC を使用する方法を紹介し、具体的なコード例を通じて、読者が言語を超えたコミュニケーションを実現する方法を理解できるようにします。

gRPC とは何ですか?
gRPC (gRPC リモート プロシージャ コール) は、高性能、オープンソース、言語を超えたリモート プロシージャ コール (RPC) フレームワークです。これは、Google の Protocol Buffers (略して ProtoBuf) シリアル化プロトコルに基づいて開発されています。サービスとメッセージのタイプを定義することで、gRPC はさまざまな言語でクライアント側とサーバー側のコードを簡単に生成し、異なる言語間の通信を実現できます。

環境の準備:
開始する前に、Golang と gRPC の開発環境がインストールされていることを確認してください。 gRPC 開発ツールと Golang プラグインは、公式ドキュメントからインストールできます。

ステップ 1: .proto ファイルを定義する
.proto ファイルは gRPC のコアの 1 つで、サービスとメッセージ タイプを定義するために使用されます。 ProtoBuf 言語を使用してデータ構造とサービスを定義できます。

次は、SayHello メソッドを含む HelloWorld サービスを定義する簡単な .proto ファイルの例です。入力パラメータは HelloRequest メッセージであり、HelloResponse メッセージを返します。

syntax = "proto3";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

ステップ 2: コードの生成
.proto ファイルを定義した後、gRPC が提供するプロトコル コンパイラ protoc を使用して、対応する言語でクライアント側およびサーバー側のコードを生成できます。

ターミナルで次のコマンドを実行して、Golang コードを生成します:

protoc -I=./protos --go_out=plugins=grpc:./protos ./protos/helloworld.proto

このコマンドは、.proto ファイルが存在するディレクトリに基づいて helloworld.pb.go ファイルを生成します。コードは後で使用します。

ステップ 3: サーバー側コードを作成する
次に、Golang を使用してサーバー側コードを作成します。まず、gRPC と自動生成された .pb.go ファイルをインポートする必要があります。

package main

import (
    "context"
    "fmt"
    "log"
    "net"

    "github.com/example/protos"
    "google.golang.org/grpc"
)

const (
    port = ":50051"
)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *protos.HelloRequest) (*protos.HelloResponse, error) {
    return &protos.HelloResponse{Message: "Hello " + in.Name}, nil
}

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    protos.RegisterGreeterServer(s, &server{})
    fmt.Println("Server started on port" + port)
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

上記のコードでは、server という名前の構造体を定義し、.proto ファイルで定義した SayHello メソッドを実装します。このうち、SayHello メソッドは HelloRequest 型のパラメータを受け取り、HelloResponse 型の応答を返します。

ステップ 4: クライアント コードを作成する
次に、Golang を使用してクライアント コードを作成します。まず、gRPC と自動生成された .pb.go ファイルをインポートする必要があります。

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/example/protos"
    "google.golang.org/grpc"
)

const (
    address = "localhost:50051"
)

func main() {
    conn, err := grpc.Dial(address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    c := protos.NewGreeterClient(conn)
    name := "World"
    r, err := c.SayHello(context.Background(), &protos.HelloRequest{Name: name})
    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }
    log.Printf("Greeting: %s", r.Message)
    fmt.Println("Client finished")
}

上記のコードでは、grpc.Dial を使用してサーバーとの接続を確立し、GreeterClient を作成して SayHello メソッドを呼び出します。次に、サーバーから返されたメッセージの内容を出力します。

ステップ 5: コードを実行する
最後に、これら 2 つのコードを実行してテストします。まず、サーバー側のコードを開始し、次にクライアント側のコードを開始します。

サーバーは「サーバーはポート 50051 で開始しました」を出力し、クライアントは「挨拶: Hello World」を出力します。これは、サーバーがクライアントのリクエストを正常に受信し、正しい応答を返したことを意味します。

概要:
gRPC フレームワークを使用すると、言語を超えたコミュニケーションを簡単に実現できます。この記事では、具体的なサンプル コードを通じて、Golang で gRPC を使用して開発する方法を示します。ニーズに基づいてメッセージとサービスを定義し、サーバー側とクライアント側のコードを記述して言語を超えたコミュニケーションを可能にすることができます。この記事が gRPC フレームワークの理解と使用に役立つことを願っています。

以上がGolang 開発: gRPC を使用して言語を超えたコミュニケーションを実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
GOのインターフェイスと多型:コードの再利用性の達成GOのインターフェイスと多型:コードの再利用性の達成Apr 29, 2025 am 12:31 AM

インターフェースアンドポリマスを導入することは、codeReusablivedainability.1)defineinterfacesattherightabstractionlevel.2)useinterfacesfordependencyinjection.3)profilecodetAnageperformanceImpacts。

GOの「init」関数の役割は何ですか?GOの「init」関数の役割は何ですか?Apr 29, 2025 am 12:28 AM

initistingorunsoutomativiviseativeatializepackages andsetuptheenvironment.it'susefulforstingupglobalvariables、resources、およびperformingone-tastasksacrossanypackage.hoer'showitworks:1)Itcanbeusedinpackage、not not-justhe、

GOのインターフェイス構成:複雑な抽象化を構築しますGOのインターフェイス構成:複雑な抽象化を構築しますApr 29, 2025 am 12:24 AM

インターフェイスの組み合わせは、関数を小さな焦点を絞ったインターフェイスに分解することにより、GOプログラミングで複雑な抽象化を構築します。 1)リーダー、ライター、およびより近いインターフェイスを定義します。 2)これらのインターフェイスを組み合わせて、ファイルやネットワークストリームなどの複雑なタイプを作成します。 3)ProcessData関数を使用して、これらの組み合わせインターフェイスを処理する方法を示します。このアプローチはコードの柔軟性、テスト可能性、再利用性を高めますが、過度の断片化と組み合わせの複雑さを避けるために注意する必要があります。

goでinit機能を使用する場合の潜在的な落とし穴と考慮事項goでinit機能を使用する場合の潜在的な落とし穴と考慮事項Apr 29, 2025 am 12:02 AM

intionsingoareautomativitiveedemain foreThemain foreThemaindareusefurfurforseTup butChallenges.1)実行命令:rundistionsrunindediontionOrder.2)テスト:テスト:in functionsMayInterwithests、b

GOの地図をどのように反復しますか?GOの地図をどのように反復しますか?Apr 28, 2025 pm 05:15 PM

記事では、GOのマップを介して反復し、安全なプラクティスに焦点を当て、エントリを変更し、大規模なマップのパフォーマンスに関する考慮事項に焦点を当てています。

GOでどのようにマップを作成しますか?GOでどのようにマップを作成しますか?Apr 28, 2025 pm 05:14 PM

この記事では、初期化方法や要素の追加/更新など、GOのマップの作成と操作について説明します。

ArrayとGoのスライスの違いは何ですか?ArrayとGoのスライスの違いは何ですか?Apr 28, 2025 pm 05:13 PM

この記事では、GOの配列とスライスの違いについて説明し、サイズ、メモリの割り当て、機能の合格、および使用シナリオに焦点を当てています。アレイは固定サイズで、スタックに挿入されていますが、スライスは動的で、しばしばヒープアロークされ、より柔軟です。

GOでどのようにスライスを作成しますか?GOでどのようにスライスを作成しますか?Apr 28, 2025 pm 05:12 PM

この記事では、リテラル、メイク機能、既存のアレイまたはスライスのスライスなど、GOのスライスの作成と初期化について説明します。また、スライスの構文とスライスの長さと容量の決定もカバーします。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

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