CodeBlanks Logo Icon CodeBlanks

Özet - gRPC

  • Go kursu
  • İleri seviye
  • Ders 42/68
  • 4 dk

Sunucu ve istemciyi birleştirerek bir gRPC servis yazarsın.

gRPC özeti

Akış: sözleşmeyi .proto'da yaz → protoc ile Go kodu üret → sunucuda arayüzü uygula, Register et, Serve et → istemcide NewClient + üretilmiş istemciyle zaman aşımlı çağrı yap. Hatalar status ve codes ile taşınır.

Alan numaralarını asla değiştirme; silinenleri reserved yap.

Interceptor

gRPC'de middleware'in karşılığı interceptor'dır. Sunucuya grpc.UnaryInterceptor(...) seçeneğiyle eklenir ve her tekli çağrıdan önce/sonra çalışır:

func logla(ctx context.Context, req any, info *grpc.UnaryServerInfo, h grpc.UnaryHandler) (any, error) {
    bas := time.Now()
    resp, err := h(ctx, req)
    log.Println(info.FullMethod, time.Since(bas))
    return resp, err
}

Uygulama Interceptor benzetimi

type Handler func(string) string tanımla. intercept(h Handler) Handler yaz: çağrıdan önce ">", sonra "<" yazdırsın ve sonucu döndürsün. intercept(func(s string) string { return s + "!" })("go") sonucunu yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Handler func(string) string

func intercept(h Handler) Handler {
    return func(s string) string {
        fmt.Println(">")
        r := h(s)
        fmt.Println("<")
        return r
    }
}

func main() {
    fmt.Println(intercept(func(s string) string { return s + "!" })("go"))
}

Beklenen çıktı

>
<
go!

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 İstemci "kaynak bulunamadı" durumunu nasıl anlar?

  • Yanıt boş olunca
  • status.Code(err) == codes.NotFound Doğru cevap
  • err == nil
  • HTTP 404 başlığından

Açıklama: gRPC hata kodları status paketinden okunur; NotFound sunucunun status.Error(codes.NotFound, ...) ile döndürdüğü koddur.

2 Hata kodu

Soru
return nil, status.Error(codes.____, "ürün yok")
Cevap
return nil, status.Error(codes.NotFound, "ürün yok")

Açıklama: codes.NotFound istenen kaydın bulunmadığını bildiren gRPC durum kodudur.

3 Grubun özeti

Kavram Anlamı
.proto Sözleşme
protoc Kod üretimi
Interceptor gRPC middleware'i
codes.DeadlineExceeded Süre doldu

İleri seviye bölümündeki tüm dersler