Ich fing an zu lernen. Ich habe angefangen, gRPC zu studieren. Zuerst habe ich es versucht. Ich bin mehr gestolpert als ich erwartet hatte, also werde ich ein Protokoll führen. Quick start – gRPC
Ich bin mir nicht sicher über go oder gRPC.
Die Umgebung hat dieses Docker-Image verwendet. Als Name habe ich es getan, weil ich es wollte. grpc/go - Docker Hub
Docker Ich habe es so gestartet. Docker Ich bin mir nicht sicher.
docker pull grpc/go
docker run --name grpc-go -it grpc/go /bin/bash
Quick Start In der Reihenfolge gemäß Schnellstart ausführen.
Wenn Sie den folgenden Befehl ausführen,
$ go run greeter_server/main.go
Ich bekomme so einen Fehler.
cannot find package "golang.org/x/net/http2"
Und
undefined: "github.com/golang/protobuf/proto".ProtoPackageIsVersion4
Ich gebe etwas ein, das notwendig erscheint, und setze es mit dem folgenden Befehl wieder ein.
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
Der letzte ahmte das Kopieren und Einfügen nach und fügte -u
hinzu, aber ich bin mir nicht sicher.
Es sieht aus wie ein 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.
Als ich den obigen Fehler bekam, habe ich den folgenden Befehl verwendet, um ihn zu löschen und wieder einzufügen, sodass ich die Version nicht herausfinden konnte.
Ich möchte es bald verstehen. Ich habe rm
gemacht, aber übrigens habe ich die Binärdatei nicht gelöscht. Was ist passiert? Wurde es überschrieben?
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
Als ein Fehler auftrat, habe ich hier darauf hingewiesen. Go Frequently Asked Questions | Protocol Buffers | Google Developers
Mit der obigen Korrespondenz arbeiteten der erste Server und Client. Danach, als ich SayHello Again machte, wurde mir gesagt, dass es undefiniert sei.
$ 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)
Das pb" google.golang.org/grpc/examples/helloworld/helloworld "
in main.go
war verdächtig. Wenn Sie also dem Pfad folgen, finden Sie/ go / src / google.golang.org Es gab ein altes
helloworld.proto in / grpc / examples / helloworld / helloworld
.
Ich war mir nicht sicher, was ich tun sollte, aber ich habe das modifizierte ~ / grpc-go / examples / helloworld / helloworld
auf den obigen Pfad überschrieben.
Als ich Server und Client erneut ausführte, funktionierte es wie erwartet.
Vorerst war es gut. "Hallo Welt" ist fertig.
Die Umgebung, als es sich schließlich bewegte, ist so.
Ich bin mir nicht sicher, wie ich die Version überprüfen soll, die ich mit "go get" eingegeben habe.
GOPATH
ist ein Bild von Docker Pull
und ist standardmäßig enthalten.
.bashrc
funktioniert auch wenn es leer ist.
# 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
Ich konnte so etwas wie Hello World machen. Es gibt so viele Dinge, die ich nicht verstehe, also lasst uns lernen, während wir Stück für Stück lernen.
Recommended Posts