ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
テンプレート
- B-sure Cold Press Mustard Cooking Oil
- Ban dang tim kiem dia chi in an gia re va uy tin tai Ha Noi
- POPULLAR MOVIE
- POPULLAR MOVIE
- GK
- Dich vu in an sang tao doc dao an tuong
- Dich vu in an sang tao doc dao an tuong
- エラー
- コード+ヘッダ
- コード
- Paige
- T N lu
- Genia Begay
- Diego Herz
- Indira Tubbs
- Kfo M
- Muoi Crowe
- adwords zertifizierte agentur
- Charlie Ricker
- Jrfpgxn
- J Xwkzgg b Pzg
- Maryam
- Matt Aplin
※執筆中
公式のクイックスタートの詳しい解説をします。
要インストール
-
Goプラグライン
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 $ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 |
※「protoc」コマンドをターミナル / コマンドプロンプトで実行できるようにPATHを通してください。(OS毎に操作が異なるので省略します)
サンプルコードの入手
以下のコマンドでサンプルコードを入手しましょう。
$ git clone -b v1.59.0 --depth 1 https://github.com/grpc/grpc-go |
基本的の以下の「helloworld」プロジェクトしか使用しませんので移動しましょう。
$ cd grpc-go/examples/helloworld |
サンプルアプリの実行
とりあえずサンプルアプリを動かしてみましょう。
詳細の解説は後程。
まずはサーバー側を起動します。
$ go run greeter_server/main.go |
続けて同じくターミナル / コマンドプロンプトをもう一つ開き、クライアントを起動します。
$ go run greeter_client/main.go Greeting: Hello world |
上記のコマンドを実行すると、サーバー側のターミナルで「Received: world」と表示されれば成功です。
greeter_client/main.goの説明
var ( addr = flag.String("addr", "localhost:50051", "the address to connect to") name = flag.String("name", defaultName, "Name to greet") ) |
ここでは、コマンドライン引数として受け取るための変数 addr(サーバーアドレス)と name(挨拶する相手の名前)を定義しています。
flagパッケージは、コマンドライン引数を処理するためのGo言語の標準ライブラリです。このパッケージを使用することで、プログラムを実行する際にコマンドライン引数を指定できます。
flag.Parse() の呼び出しは、flag パッケージがコマンドライン引数を解釈し、各フラグの値を更新するために必要です。コマンドライン引数を解釈しないと、各フラグの値はデフォルトのままとなります。
※今回は引数なしで実行しているので、上記の2つ目の引数で指定されているデフォルト値である「localhost:50051」、「defaultName」が採用されます。
conn, err := grpc.Dial(*addr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() |
gRPCサーバーへの接続を確立します。
また、セキュリティ設定として insecure.NewCredentials() を使用しています。
grpc.Dial は、指定されたアドレスに対してgRPCサーバーへの接続を確立します。
c := pb.NewGreeterClient(conn) |
HelloWorldサービスのgRPCクライアントを作成します。
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.GetMessage()) |
サーバーに挨拶を要求して、その結果を出力します。context.WithTimeout を使用して、タイムアウトが発生した場合にコンテキストがキャンセルされるようにします。
このクライアントは、指定された名前でHelloWorldサービスに挨拶を送り、サーバーからの応答をログに出力します。
greeter_server/main.goの説明
以下のプログラムごとのコメントをまずざっくりご確認ください。
詳細は後述します。
// コマンドライン引数を処理するための変数 // HelloWorldサービスのgRPCサーバーを実装する構造体
// GreeterサービスのSayHelloメソッドの実装
// client側のmain.goの説明を参照 flag.Parse() |
このコードはgRPCを使用してHelloWorldサービスに対するサーバーを実装しており、コマンドライン引数からポート番号を指定してサーバーを起動します。※今回は引数がないのでデフォルト値です。
サーバーはクライアントからの挨拶リクエストを受け付け、応答として挨拶メッセージを返します。
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port)) |
この行は、gRPCサーバーがリッスンするネットワークアドレスを設定しています。具体的には、TCPネットワークを指定し、指定されたポート番号で接続を受け入れるための net.Listener インターフェースを作成しています。
詳細を解説します:
-
fmt.Sprintf(":%d", *port) は、指定されたポート番号 *port を文字列に変換し、その後にコロン : を付け加えています。これにより、指定されたポート番号のTCPアドレスが作成されます。
-
net.Listen("tcp", ...) は、TCPネットワークを指定してリッスン用の net.Listener インターフェースを生成します。具体的には、指定されたTCPアドレスでクライアントからの接続を待ち受けるように設定されます。
-
lis, err := ... は、net.Listen の戻り値として得られる net.Listener インターフェースとエラーを取得します。エラーが発生した場合は、err にエラーが格納され、それに対処することができます。
したがって、この行全体で言えば、サーバーは指定されたポート番号でTCPアドレスをリッスンし、クライアントからの接続を待ち受ける net.Listener インターフェースを取得しています。
gRPC serviceの変更
gRPCサービスはプロトコルバッファを使って定義します。
クライアントからHelloRequestパラメータを受け取り、サーバからHelloReplyを返すSayHello() RPCメソッドがあり、そのメソッドが次のように定義されていることだけ知っていれば十分です。
「helloworld/helloworld.proto」のファイルを開いてみましょう。
以下のような記述があります。
// The greeting service definition. // The request message containing the user's name. // The response message containing the greetings |
新しく「SayHelloAgain()」を追加してみましょう。
// The greeting service definition. // The request message containing the user's name. // The response message containing the greetings |
gRPCコードの再生成
a |
a |
a |
a |
a |
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
テンプレート
- B-sure Cold Press Mustard Cooking Oil
- Ban dang tim kiem dia chi in an gia re va uy tin tai Ha Noi
- POPULLAR MOVIE
- POPULLAR MOVIE
- GK
- Dich vu in an sang tao doc dao an tuong
- Dich vu in an sang tao doc dao an tuong
- エラー
- コード+ヘッダ
- コード
- Paige
- T N lu
- Genia Begay
- Diego Herz
- Indira Tubbs
- Kfo M
- Muoi Crowe
- adwords zertifizierte agentur
- Charlie Ricker
- Jrfpgxn
- J Xwkzgg b Pzg
- Maryam
- Matt Aplin
人気ページ
最近更新/作成されたページ
- UE5でBlenderファイル(.blend)をインポートする方法 NEW! (2025-02-19 02:46:41)
- UE5で鏡を作成する方法 NEW! (2025-02-19 02:46:24)
- Unreal Engine 5 (UE5) とは? (2025-02-19 02:10:15)
- Revit APIの「グループ」について NEW! (2025-02-03 13:14:26)
- Gitの「MERGING」の状態の説明と競合の解決策 NEW! (2025-01-22 20:43:37)
- 【Gitエラー】error: Your local changes to the following files would be overwritten by checkout: NEW! (2025-01-22 20:06:48)
- Gitとは 使い方 (2025-01-22 20:03:53)
- .gitignoreの書き方 NEW! (2025-01-22 16:21:59)
- 【Visual Studio】.suoファイルとは NEW! (2025-01-22 16:18:09)
- 【gitエラー】 Unlink of file 'ファイル名' failed. Should I try again? (y/n) について (2025-01-15 22:24:27)
コメントを削除してもよろしいでしょうか?