ホームページ  >  記事  >  バックエンド開発  >  Windows10+golang+gRPC環境構築を詳しく解説

Windows10+golang+gRPC環境構築を詳しく解説

藏色散人
藏色散人転載
2021-03-15 17:08:173856ブラウズ

golang の次のチュートリアル コラムでは、Windows10 golang gRPC 環境構築について紹介します。

Windows10+golang+gRPC環境構築を詳しく解説

1. protoc のインストール
ダウンロードアドレス: https: //github.com/protocolbuffers/protobuf/release

(注: https://github.com/protocolbuffers/protobuf はそのソース コード ライブラリであり、そこから学ぶことができます。ソース コード ライブラリのダウンロードが遅すぎる場合は、 Code Cloudで検索できます。同期ライブラリは国産のものが多く、ダウンロード速度も比較的速いです。もちろん、Code Cloud上で同期ライブラリを自分で作成することも可能です)

最新バージョンは3.12.2

私のものは Windows10 64 ビット オペレーティング システムなので、バージョンを選択してください: protoc-3.12.2-win64.zip
ブラウザで直接ダウンロードできます
インターネット速度が十分でない場合Thunder を使用してダウンロードすることもできます: https://github.com/protocolbuffers/ protobuf/releases/download/v3.12.2/protoc-3.12.2-win64.zip
解凍後、protoc.exe を$GOPATH/bin ディレクトリ
複数の GOPATH がある場合は、パブリックに配置しますサードパーティ ライブラリの GOPATH では、複数のプロジェクトで使用できます

2. gRPC
をインストールしますgRPC ソースコード: https://github.com/grpc/grpc-go.git

公式 Web サイトで提供されているインストール方法は次のとおりです: go get -u google.golang.org/grpc
しかし、次のエラーが発生します中国でよく発生します:

$ go get -u google.golang.org/grpc
package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
中国では google.golang.org にアクセスするのが難しいため、ダウンロードは失敗します。

公式 Web サイトでは、複数のソリューションも提供しています:
https://github.com/grpc/grpc-go
2 番目の方法を使用して、ソース コードをローカルに直接クローンします
Enter $ In GOPATH/src ディレクトリで、次のコマンドを実行します:

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
ダウンロード速度は速い場合もあれば、遅い場合もあります。非常に遅い場合は、キャンセルして再トリガーできます。数回試すと、場合によっては速度が遅くなることがあります。もっと早く。

ダウンロードが完了したら、gRPC:

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$ go install google.golang.org/grpc/
google.golang.org\grpc\credentials\credentials.go:31:2: cannot find package "github.com/golang/protobuf/proto" in any of:
        D:\Go\src\github.com\golang\protobuf\proto (from $GOROOT)
        C:\Users\ASUS\go\src\github.com\golang\protobuf\proto (from $GOPATH)
google.golang.org\grpc\internal\binarylog\method_logger.go:28:2: cannot find package "github.com/golang/protobuf/ptypes" in any of:
        D:\Go\src\github.com\golang\protobuf\ptypes (from $GOROOT)
        C:\Users\ASUS\go\src\github.com\golang\protobuf\ptypes (from $GOPATH)
google.golang.org\grpc\binarylog\grpc_binarylog_v1\binarylog.pb.go:9:2: cannot find package "github.com/golang/protobuf/ptypes/duration" in any of:
        D:\Go\src\github.com\golang\protobuf\ptypes\duration (from $GOROOT)
        C:\Users\ASUS\go\src\github.com\golang\protobuf\ptypes\duration (from $GOPATH)
google.golang.org\grpc\binarylog\grpc_binarylog_v1\binarylog.pb.go:10:2: cannot find package "github.com/golang/protobuf/ptypes/timestamp" in any of:
        D:\Go\src\github.com\golang\protobuf\ptypes\timestamp (from $GOROOT)
        C:\Users\ASUS\go\src\github.com\golang\protobuf\ptypes\timestamp (from $GOPATH)
google.golang.org\grpc\internal\transport\controlbuf.go:28:2: cannot find package "golang.org/x/net/http2" in any of:
        D:\Go\src\golang.org\x\net\http2 (from $GOROOT)
        C:\Users\ASUS\go\src\golang.org\x\net\http2 (from $GOPATH)
google.golang.org\grpc\internal\transport\controlbuf.go:29:2: cannot find package "golang.org/x/net/http2/hpack" in any of:
        D:\Go\src\golang.org\x\net\http2\hpack (from $GOROOT)
        C:\Users\ASUS\go\src\golang.org\x\net\http2\hpack (from $GOPATH)
google.golang.org\grpc\server.go:36:2: cannot find package "golang.org/x/net/trace" in any of:
        D:\Go\src\golang.org\x\net\trace (from $GOROOT)
        C:\Users\ASUS\go\src\golang.org\x\net\trace (from $GOPATH)
google.golang.org\grpc\status\status.go:34:2: cannot find package "google.golang.org/genproto/googleapis/rpc/status" in any of:
        D:\Go\src\google.golang.org\genproto\googleapis\rpc\status (from $GOROOT)
        C:\Users\ASUS\go\src\google.golang.org\genproto\googleapis\rpc\status (from $GOPATH)
をインストールします。エラーが多数発生することがわかります。プロンプトによると、パッケージがないことが原因であることがわかります。インストールはしません。ここでエラー情報を少しずつ分析しますが、必要な依存関係パッケージとダウンロード メソッドを直接指定します ($GOPATH/src ディレクトリでコマンドを実行します):

1) テキスト パッケージ

git clone https://github.com/golang/text.git ./golang.org/x/text
2) ネット パッケージ

git clone https://github.com/golang/net.git ./golang.org/x/net
3) genproto パッケージ

git clone https://github.com/google/go-genproto.git ./google.golang.org/genproto
4) 2 つの protobuf パッケージ

:

git clone https://github.com/protocolbuffers/protobuf-go.git ./google.golang.org/protobuf
git clone https://github.com/golang/protobuf.git ./github.com/golang/protobuf
をダウンロードする必要があります。github.com/golang/protobuf のコードの一部google.golang.org/protobuf

に依存します。 上記の依存ライブラリをすべてダウンロードした後、gRPC を再インストールします。

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$ go install google.golang.org/grpc/

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$
エラーや出力がないことがわかります。 。 。

gRPC が OK かどうかを確認します

2 つの bash ウィンドウを開いて、それぞれ次の手順を実行します。

go run google.golang.org/grpc/examples/helloworld/greeter_server/main.go
go run google.golang.org/grpc/examples/helloworld/greeter_client/main.go

Windows10+golang+gRPC環境構築を詳しく解説

図に示すように、次のことがわかります。サーバーがクライアントを受信したこと クライアントによって送信されたメッセージ

3. rpc
をコンパイルする 書き込まれた proto ファイルについては、.go ファイルになるようにコンパイルする必要があります。

$GOPATHgoogle.golang.orggrpcexampleshelloworldhelloworld ディレクトリ 次のファイルがあります:

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ ll
total 16
-rw-r--r-- 1 ASUS 197121 4938 6月   1 21:46 helloworld.pb.go
-rw-r--r-- 1 ASUS 197121 1208 6月   1 21:46 helloworld.proto
-rw-r--r-- 1 ASUS 197121 2823 6月   1 21:46 helloworld_grpc.pb.go
まず .go ファイルをバックアップしましょう

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ mv helloworld.pb.go helloworld.pb.go.bak

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ mv helloworld_grpc.pb.go helloworld_grpc.pb.go.bak

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ ll
total 16
-rw-r--r-- 1 ASUS 197121 4938 6月   1 21:46 helloworld.pb.go.bak
-rw-r--r-- 1 ASUS 197121 1208 6月   1 21:46 helloworld.proto
-rw-r--r-- 1 ASUS 197121 2823 6月   1 21:46 helloworld_grpc.pb.go.bak
それから実行してください:

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ protoc --go_out=plugins=grpc:. helloworld.proto
'protoc-gen-go' ????????????????????????е????
?????????????
--go_out: protoc-gen-go: Plugin failed with status code 1.
Foundエラーが発生したため、protoc-gen-go をインストールする必要があります

次のコマンドを実行してインストールします:

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$ go install github.com/golang/protobuf/protoc-gen-go/

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$ cd ../bin

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/bin
$ ll
total 11852
-rwxr-xr-x 1 ASUS 197121 3702272 5月  27 07:06 protoc.exe*
-rwxr-xr-x 1 ASUS 197121 8431104 6月   1 23:13 protoc-gen-go.exe*
インストールが完了すると、protoc-gen-go.exe ファイルが $GOPATH に生成されます/bin ディレクトリ

次に、コンパイルされた proto ファイルを実行します。
helloworld が生成されます。.pb.go ファイル

概要
理解する必要があるライブラリがいくつかあります:

1, https://github.com/protocolbuffers/protobuf

これは、Google のオープン ソースの protobuf ソース コード ライブラリです。このライブラリには、一般的に使用されるさまざまな言語で protobuf を実装するためのソース コードが含まれています。 ##2、https://github.com/golang/protobuf
このライブラリは golang protobuf オープン ソース ライブラリからのものです。このライブラリの README.md を確認すると、このライブラリは

に置き換えられていることがわかります。 google.golang.org/protobuf

。このリンクをクリックすると、このライブラリに対応するソース コード git リポジトリが次のとおりであることがわかります:
https://github.com/protocolbuffers/protobuf-go質問:

現在オープンソース コミュニティを見ていると、github の protobuf は徐々に google.golang.org ライブラリに置き換えられる予定ですが、現在のプラグインは依然として github の protoc-gen-go を使用する必要があります。
google.golang.org/protobuf/cmd/protoc-gen-go を使用する場合 (つまり、google.golang.org/protobuf/cmd/protoc-gen-go をインストールすると、protoc-gen も生成されます) -go.exe ($GOPATH/bin ディレクトリにあります))、これにより次のエラーが発生します
ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ protoc --go_out=plugins=grpc:. helloworld.proto
--go_out: protoc-gen-go: plugins are not supported; use 'protoc --go-grpc_out=...' to generate gRPC

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ protoc --go-grpc_out=. helloworld.proto
'protoc-gen-go-grpc' ????????????????????????е????
?????????????
--go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1.

後で grpc インターフェイスを生成するための別の protoc-gen-go-grpc が作成されますが、これはまだコードレビュー段階にあり、リリースされる予定です。 。 。

以上がWindows10+golang+gRPC環境構築を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。