Maison  >  Article  >  développement back-end  >  Explication détaillée de la construction de l'environnement Windows10+golang+gRPC

Explication détaillée de la construction de l'environnement Windows10+golang+gRPC

藏色散人
藏色散人avant
2021-03-15 17:08:173880parcourir

La colonne tutorielle suivante de golang vous présentera la construction de l'environnement Windows10+golang+gRPC. J'espère qu'elle sera utile aux amis dans le besoin !

Explication détaillée de la construction de l'environnement Windows10+golang+gRPC

1. Protocole d'installation

Adresse de téléchargement : https://github.com/protocolbuffers/protobuf/release
(Remarque : https://github.com/protocolbuffers/protobuf est sa bibliothèque de code source, vous pouvez en tirer des leçons. Si la bibliothèque de code source est trop lente pour télécharger, vous pouvez accéder au code cloud Search, de nombreuses bibliothèques synchronisées proviennent de sources nationales et la vitesse de téléchargement est relativement rapide. Bien sûr, vous pouvez également créer vous-même une bibliothèque synchronisée sur Code Cloud)

Le. la dernière version est la 3.12.2
La mienne est le système d'exploitation Windows10 64 bits, alors choisissez la version : protoc-3.12.2-win64.zip
Vous pouvez la télécharger directement avec le navigateur
Si la vitesse Internet ne suffit pas, vous pouvez également utiliser Thunder pour télécharger : https://github.com/ protocolbuffers/protobuf/releases/download/v3.12.2/protoc-3.12.2-win64.zip
Après décompression, copiez le protocole. exe dans le répertoire $GOPATH/bin
S'il existe plusieurs GOPATH, placez-les dans Mettez-le dans le GOPATH de la bibliothèque publique tierce, afin que plusieurs projets puissent l'utiliser

2 Installez gRPC.

Code source de gRPC : https://github.com/grpc/grpc-go .git
La méthode d'installation donnée par le site officiel est : go get -u google.golang.org/grpc
Mais l'erreur suivante se produit souvent en Chine :

$ 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)

Parce que google.golang.org est très populaire en Chine, il est difficile d'accès, le téléchargement échouera donc.
Le site officiel propose également plusieurs solutions :
https://github.com/grpc/grpc-go
Nous utilisons la deuxième méthode pour cloner directement le code source localement
Entrez $ dans le GOPATH /src, exécutez la commande :

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc

La vitesse de téléchargement est parfois rapide, parfois lente. Lorsqu'elle est très lente, vous pouvez annuler et réessayer plusieurs fois et elle sera parfois plus rapide. .
Une fois le téléchargement terminé, installez 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)

Vous constaterez qu'il y aura de nombreuses erreurs. Selon les invites, vous constaterez que cela est dû au manque de packages. analysez les informations d'erreur petit à petit ici, mais donnez directement les packages de dépendances et les méthodes de téléchargement requis (exécutez la commande dans le répertoire $GOPATH/src) :
1) package texte

git clone https://github.com/golang/text.git ./golang.org/x/text

2) package net

git clone https://github.com/golang/net.git ./golang.org/x/net

3) package genproto

git clone https://github.com/google/go-genproto.git ./google.golang.org/genproto

4) Deux packages 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

les deux doivent être téléchargés. Certains des codes sur github.com/golang. /protobuf depend de google.golang.org/protobuf

Après avoir téléchargé toutes les bibliothèques dépendantes ci-dessus, réinstallez gRPC :

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

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$

On peut voir qu'il n'y a aucune erreur ni aucune sortie. . .

Vérifiez si gRPC est OK
Ouvrez deux fenêtres bash et exécutez respectivement les commandes suivantes :

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

Explication détaillée de la construction de lenvironnement Windows10+golang+gRPC

Comme le montre la figure, le serveur a reçu le client Le message envoyé par le client

3. Compiler rpc

Pour le fichier proto écrit, il doit être compilé pour devenir un fichier .go, par exemple :
$ GOPATHgoogle.golang.orggrpcexampleshelloworldhelloworld directory Il y a les fichiers suivants :

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

Sauvegardeons d'abord le fichier .go

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

puis exécutons :

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

Trouvé une erreur et besoin pour installer protoc-gen-go
Exécutez la commande suivante pour installer :

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.

Une fois l'installation terminée, le fichier protoc-gen-go.exe sera généré dans le répertoire $GOPATH/bin
puis exécutez le fichier proto compilé :
générera un fichier helloworld .pb.go

Résumé

Il existe plusieurs bibliothèques que vous devez connaître :

1. https://github.com/protocolbuffers/protobuf
Il s'agit de la bibliothèque de code source protobuf open source de Google. Cette bibliothèque contient le code source pour implémenter protobuf dans divers langages couramment utilisés

. 2. https://github.com/golang/protobuf
Cette bibliothèque provient de la bibliothèque open source golang protobuf, vérifiez le README.md de cette bibliothèque et vous constaterez que cette bibliothèque a été remplacée par google.golang.org/protobuf. ce lien et vous constaterez que le dépôt git de code source correspondant à cette bibliothèque est :
https://github.com/ protocolbuffers/protobuf-go

Problème :

En regardant la communauté open source actuellement, le protobuf de github sera progressivement remplacé par la bibliothèque google.golang.org, mais le plug-in actuel doit toujours utiliser le protoc-gen -go de github,
Si vous utilisez google.golang.org/ protobuf/cmd/protoc-gen-go (c'est-à-dire allez installer google.golang.org/protobuf/cmd/protoc-gen-go, ce sera également dans le répertoire $GOPATH /bin), entraînera l'erreur suivante

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*

Il y aura un protoc-gen-go-grpc séparé pour générer l'interface grpc, mais il est encore en phase de révision du code, à paraître. . .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer