Go Academy · Lektion

Implementering af en unary gRPC-service

Server og client med grpc-go

Lektion 2 af 413 trin

Implementering af en unary gRPC-service er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad er en unær RPC?

En unær RPC er det enkleste gRPC-mønster: Klienten sender én forespørgsel og modtager ét svar, omtrent som et almindeligt funktionskald over netværket.

Implementering af serveren

Implementér det genererede interface. Indlejr Unimplemented*Server-strukturen for fremadkompatibilitet:

type userServer struct {
    pb.UnimplementedUserServiceServer
    db *sql.DB
}

func (s *userServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
    // query DB
    return &pb.User{Id: req.Id, Name: "Alice"}, nil
}

Start af serveren

Opret en gRPC-server, registrér implementeringen, og lyt på en TCP-port:

lis, _ := net.Listen("tcp", ":50051")
grpcSrv := grpc.NewServer()
pb.RegisterUserServiceServer(grpcSrv, &userServer{})
log.Fatal(grpcSrv.Serve(lis))

Klientforbindelse

Opret forbindelse til serveren, og opret en klientstub:

conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { log.Fatal(err) }
defer conn.Close()
client := pb.NewUserServiceClient(conn)

Udførelse af et unært kald

Kald RPC-metoden på klientstubben, som om det var en lokal funktion:

ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
user, err := client.GetUser(ctx, &pb.GetUserRequest{Id: 42})
if err != nil { log.Fatalf("error: %v", err) }
fmt.Println(user.Name)

Fejlhåndtering

gRPC bruger statuskoder. Returnér fejl med status.Errorf, og kontrollér dem med status.Code(err):

import "google.golang.org/grpc/status"
import "google.golang.org/grpc/codes"

// Server:
return nil, status.Errorf(codes.NotFound, "user %d not found", req.Id)
// Client:
if status.Code(err) == codes.NotFound { /* handle */ }

Videregivelse af kontekst

Den kontekst, der sendes med klientens RPC-kald, videregiver deadlines og annullering til serveren. Serveren bør sende den videre til efterfølgende kald (database, andre RPC'er).

TLS i produktion

Erstat usikre legitimationsoplysninger med TLS i produktion:

creds, _ := credentials.NewServerTLSFromFile("cert.pem", "key.pem")
grpcSrv := grpc.NewServer(grpc.Creds(creds))

UnimplementedServer

Indlejring af pb.UnimplementedXxxServer giver stubimplementeringer af alle RPC-metoder, som returnerer statusen Unimplemented. Det sikrer, at serveren kan kompileres, når der føjes nye RPC'er til protoen, før du implementerer dem.

grpc.Dial kontra grpc.NewClient

grpc.Dial er forældet i nyere versioner. Brug grpc.NewClient, som ikke opretter en forbindelse med det samme, men først ved det første RPC-kald.

Refleksionstjenesten

Registrér gRPC-refleksionstjenesten, så værktøjer som grpcurl kan undersøge tilgængelige tjenester uden .proto-filen:

reflection.Register(grpcSrv)

Hurtigt tjek

Hvad er formålet med at indlejre pb.UnimplementedXxxServer i en gRPC-serverstruktur?

Opsummering: Unær gRPC

Vigtige punkter:

  • Implementér det genererede interface; indlejr UnimplementedServer
  • grpc.NewServer() + Register + Serve på en TCP-lytter
  • Klient: grpc.NewClient + den genererede NewXxxClient
  • Brug status.Errorf/status.Code til gRPC-fejlhåndtering
Gratis at komme i gang

Lær Go med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Implementering af en unary gRPC-service” gratis?

Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Implementering af en unary gRPC-service”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Implementering af en unary gRPC-service”?

Server og client med grpc-go Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Go Academy?

Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Implementering af en unary gRPC-service”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Go Academy-lektion?

Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Protocol Buffers og .proto-filer
  2. Implementering af en unary gRPC-service
  3. Streaming mellem server og client
  4. gRPC-interceptors og metadata
← Tilbage til Go Academy