gRPC pour Go (Golang) : bibliothèques, exemples et guide pratique

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

gRPC pour Go (Golang) : bibliothèques et exemples



gRPC est un framework d'appel de procédure distante (RPC) haute performance de Google, basé sur HTTP/2 et Protocol Buffers (protobuf). Pour le langage Go, il existe une implémentation officielle grpc-go qui permet de créer des microservices efficaces avec prise en charge du streaming bidirectionnel, du chiffrement TLS et des intercepteurs (interceptors). Dans cet article, vous trouverez une description complète des outils, des exemples de serveur et de client, ainsi que des recommandations pratiques.



Bibliothèques principales pour gRPC en Go



  • google.golang.org/grpc — la bibliothèque principale gRPC pour Go. Inclut les parties serveur et client, la prise en charge des flux, des métadonnées et de l'équilibrage de charge.
  • google.golang.org/protobuf — package pour travailler avec les messages protobuf : compilation, sérialisation, désérialisation.
  • github.com/golang/protobuf/protoc-gen-go — plugin pour le compilateur protoc, générant du code Go à partir de fichiers .proto.
  • github.com/grpc-ecosystem/grpc-gateway — utilitaire pour créer un proxy REST au-dessus de gRPC (utile pour la compatibilité avec les navigateurs).


Installation et configuration



Avant de commencer, installez le compilateur protobuf et les plugins :



# Installation de protoc (Linux/macOS)sudo apt install protobuf-compiler  # Ubuntu/Debianbrew install protobuf              # macOS

# Installation des plugins pour Gogo install google.golang.org/protobuf/cmd/protoc-gen-go@latestgo install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest


Après l'installation, mettez à jour PATH en ajoutant $GOPATH/bin.



Définition du service via un fichier .proto



Créez un fichier hello.proto :



syntax = "proto3";

package hello;

option go_package = "example.com/grpc-demo/hello";

service Greeter { rpc SayHello (HelloRequest) returns (HelloReply); rpc SayHelloStream (HelloRequest) returns (stream HelloReply);}

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Générez le code Go avec la commande :



protoc --go_out=. --go-grpc_out=. hello.proto


Les fichiers hello.pb.go (messages) et hello_grpc.pb.go (service) apparaîtront.



Exemple de serveur en Go



package main

import ( "log" "net"

pb "example.com/grpc-demo/hello" "google.golang.org/grpc")

type server struct { pb.UnimplementedGreeterServer}

func (s *server) SayHello(req *pb.HelloRequest, stream pb.Greeter_SayHelloServer) error { // RPC normal return stream.Send(&pb.HelloReply{Message: "Hello, " + req.Name})}

func (s *server) SayHelloStream(req *pb.HelloRequest, stream pb.Greeter_SayHelloServer) error { // Réponse en streaming for i := 0; i < 5; i++ { if err := stream.Send(&pb.HelloReply{Message: "Hello " + req.Name + " #" + string(rune(i))}); err != nil { return err } } return nil}

func main() { lis, _ := net.Listen("tcp", ":50051") s := grpc.NewServer() pb.RegisterGreeterServer(s, &server{}) log.Println("Server listening on :50051") if err := s.Serve(lis); err != nil { log.Fatalf("Failed to serve: %v", err) }}


Exemple de client en Go



package main

import ( "context" "log" "time"

pb "example.com/grpc-demo/hello" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure")

func main() { conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close()

client := pb.NewGreeterClient(conn) ctx, ca

Recommendations