2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker環境のgRPC/goでハローワールド

Last updated at Posted at 2020-11-03

はじめに

goのお勉強しはじめた。gRPCのお勉強しはじめた。まず、これを試してみた。
思ったより、つまづいたので記録を残しておく。
Quick start – gRPC

goもgRPCもよくわかってない。

環境は、このdockerイメージを使った。名前的に、欲しいの入ってそうやったので。
grpc/go - Docker Hub

Docker

こんな感じで立ち上げた。Dockerよくわからん 。

docker pull grpc/go
docker run --name grpc-go -it grpc/go /bin/bash 

Quick Start

Quick Startにそって順番に実行していく。

下記コマンドを実行すると、

$ go run greeter_server/main.go

こんな感じのエラーが出る。

cannot find package "golang.org/x/net/http2"

とか

undefined: "github.com/golang/protobuf/proto".ProtoPackageIsVersion4

必要そうなのを入れたり、下記コマンドで入れ直したりした。

go get golang.org/x/sys/unix
go get golang.org/x/net/http2
go get google.golang.org/genproto/googleapis/rpc/status
go get -u github.com/golang/protobuf/proto

最後のやつはコピペもとを真似して-uをつけたけど、よくわかってない。
updateっぽいけど。

go - The Go Programming Language

The -u flag instructs get to update modules providing dependencies of packages named on the command line to use newer minor or patch releases when available. Continuing the previous example, 'go get -u A' will use the latest A with B v1.3.1 (not B v1.2.3). If B requires module C, but C does not provide any packages needed to build packages in A (not including tests), then C will not be updated.

上記エラーが出た時に、下記コマンドうったりして、消して入れ直したりしてたから、バージョンとかがよくわからなくなった。
そのうち、わかるようになりたい。rmしたけど、そういえばバイナリファイルは消してない。どうなったんやろう?上書きされたんかな?

rm -rf /go/src/github.com/golang/protobuf/proto
rm -rf /go/src/google.golang.org/grpc/
git clone https://github.com/grpc/grpc-go

エラー出た時、こことかを参考にした。
Go Frequently Asked Questions  |  Protocol Buffers  |  Google Developers

上記対応で、最初の、serverとclientの方は動いた。
その後、SayHelloAgainをすると、undefinedと言われた。

$ go run greeter_client/main.go 
# command-line-arguments
greeter_client/main.go:59:12: c.SayHelloAgain undefined (type helloworld.GreeterClient has no field or method SayHelloAgain)

main.goにあるpb "google.golang.org/grpc/examples/helloworld/helloworld"が怪しかったので、パスを辿って見てみると、/go/src/google.golang.org/grpc/examples/helloworld/helloworldhelloworld.protoの古いやつがあった。

どうするのが良いのかよくわからんかったけど、修正後の~/grpc-go/examples/helloworld/helloworldを上記パスに上書きコピーした。
再度、serverとclientを実行すると期待通り動いた。
とりあえず、よかった。hello world できた。

環境

最終的に動いた時の環境はこんな感じ。
go getで入れたバージョンの確認方法がよくわからん 。
GOPATHとかはdocker pullしたイメージでデフォルトで入ってた。
.bashrcは空っぽでも動いてる。

# go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/go"
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build743505095=/tmp/go-build -gno-record-gcc-switches"
# go version
go version go1.10.4 linux/amd64
# protoc --version
libprotoc 3.6.0

最後に

ハローワールド的なことできた。よくわからんことだらけなので、ちょっとずつ調べながら学んでこう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?