Implementering af en unary gRPC-service
Server og client med grpc-go
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
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
- Protocol Buffers og .proto-filer
- Implementering af en unary gRPC-service
- Streaming mellem server og client
- gRPC-interceptors og metadata