使用Docker环境中的gRPC / go实现Hello World

首先

我开始学习Go编程。我开始学习gRPC。首先,尝试了这个。由于遇到了比想象中更多的困难,所以我决定记录下来。快速入门- gRPC。

我对Go和gRPC都不太了解。

环境中使用了这个docker镜像。从名字上看,看起来应该有我想要的东西。grpc/go – Docker Hub

容器

我是这样启动的。Docker我不太懂。

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

快速开始

按照快速入门的顺序依次执行。

执行以下命令后,

$ go run greeter_server/main.go

出现了这样的错误。

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

“とか” in Chinese can be paraphrased as “之类的” de).

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”字,但是不太理解。
看起来像是更新的样子。

Go – Go 编程语言

-u标志告诉get命令在命令行上列出的包的依赖模块中使用较新的次要或补丁版本。继续上一个例子,’go get -u A’将使用带有B v1.3.1(而不是B v1.2.3)的最新A版本。如果B需要模块C,但C没有提供构建A中的包所需的任何包(不包括测试),那么C将不会被更新。

当出现上述错误时,我尝试使用下面的命令删除并重新安装,因此版本等信息变得不明确。
我希望以后能弄清楚。我执行了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

当出现错误时,我参考了这里或其他地方。经常被问到的问题 | Protocol Buffers | Google 开发者

在上述情况下,最初的服务器和客户端部分运行正常。
然而,在执行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/helloworld目录下有一个旧版本的helloworld.proto文件。

我不太清楚该怎么做才好,但我将修改后的~/grpc-go/examples/helloworld/helloworld复制到了上述路径上。

重新运行服务器和客户端后,按照预期正常运行。

总之,很好。哈喽世界完成了。

The environment can be paraphrased as “环境” .

最終运行时的环境就是这个样子。
我不太明白如何确认通过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

最后

我成功做出了一个“Hello World”的东西。因为里面有很多我不太明白的东西,所以我会边查资料边学习。

广告
将在 10 秒后关闭
bannerAds