gRPC für Go (Golang): Bibliotheken, Beispiele und praktische Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

gRPC für Go (Golang): Bibliotheken und Beispiele



gRPC ist ein leistungsstarkes Framework für entfernte Prozeduraufrufe (RPC) von Google, das auf HTTP/2 und Protocol Buffers (protobuf) basiert. Für die Sprache Go gibt es die offizielle Implementierung grpc-go, mit der Sie effiziente Mikrodienste mit Unterstützung für bidirektionales Streaming, TLS-Verschlüsselung und Interceptors erstellen können. In diesem Artikel finden Sie eine vollständige Beschreibung der Werkzeuge, Beispiele für Server und Client sowie praktische Empfehlungen.



Wichtige Bibliotheken für gRPC in Go



  • google.golang.org/grpc — die Hauptbibliothek für gRPC in Go. Enthält Server- und Client-Komponenten, Unterstützung für Streams, Metadaten und Lastausgleich.
  • google.golang.org/protobuf — Paket für die Arbeit mit protobuf-Nachrichten: Kompilierung, Serialisierung, Deserialisierung.
  • github.com/golang/protobuf/protoc-gen-go — Plugin für den Compiler protoc, das Go-Code aus .proto-Dateien generiert.
  • github.com/grpc-ecosystem/grpc-gateway — Dienstprogramm zum Erstellen von REST-Proxys über gRPC (nützlich für die Kompatibilität mit Browsern).


Installation und Einrichtung



Vor dem Start installieren Sie den protobuf-Compiler und die Plugins:



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

# Installation der Plugins für Gogo install google.golang.org/protobuf/cmd/protoc-gen-go@latestgo install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest


Nach der Installation aktualisieren Sie PATH, indem Sie $GOPATH/bin hinzufügen.



Definition des Dienstes über eine .proto-Datei



Erstellen Sie eine Datei 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;}


Generieren Sie den Go-Code mit dem Befehl:



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


Es erscheinen die Dateien hello.pb.go (Nachrichten) und hello_grpc.pb.go (Dienst).



Beispiel für einen Server in 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 { // Normaler RPC return stream.Send(&pb.HelloReply{Message: "Hello, " + req.Name})}

func (s *server) SayHelloStream(req *pb.HelloRequest, stream pb.Greeter_SayHelloServer) error { // Streaming-Antwort 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) }}


Beispiel für einen Client in 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

Empfehlungen