CodeBlanks Logo Icon CodeBlanks

Protobuf tanımı

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

.proto dosyasıyla mesaj tanımlamayı öğrenirsin.

Protobuf tanımı

gRPC'de sözleşme bir .proto dosyasında yazılır: mesajlar (veri yapıları) ve servis (çağrılabilecek yöntemler).

syntax = "proto3";
package selam;
option go_package = "example.com/app/selampb";

message SelamIstek { string ad = 1; }
message SelamYanit { string mesaj = 1; }

service Selamlayici {
  rpc Selam(SelamIstek) returns (SelamYanit);
}

Alan numaraları (= 1) ikili kodlamada alanın kimliğidir.

Türler ve tekrar eden alanlar

Protobuf türleri Go'ya doğrudan eşlenir: string → string, int32 → int32, bool → bool. repeated alan dilim olur, iç içe mesaj işaretçi olur:

message Sepet {
  string sahip = 1;
  repeated string urunler = 2;  // []string
}

Alan silerken numarasını reserved ile ayırmak, yanlışlıkla yeniden kullanılmasını engeller.

Uygulama Mesaj karşılığı

message Sepet { string sahip = 1; repeated string urunler = 2; } mesajının Go karşılığını elle yaz: type Sepet struct { Sahip string; Urunler []string }. Sepet{"ada", []string{"kalem", "defter"}} için ürün sayısını 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 Sepet struct {
    Sahip string
    Urunler   []string
}

func main() {
    s := Sepet{"ada", []string{"kalem", "defter"}}
    fmt.Println(len(s.Urunler))
}

Beklenen çıktı

2

Soru ve cevaplar

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

1 Yayındaki bir mesajın alan numarasını değiştirmek neden tehlikelidir?

  • Hiçbir etkisi olmaz
  • Eski istemciler veriyi yanlış alana çözer Doğru cevap
  • Mesaj büyür
  • Derleme yavaşlar

Açıklama: İkili biçimde alan adı değil numara gönderilir; numara değişirse eski ve yeni kod veriyi farklı yorumlar.

2 Liste alanı

Soru
message Siparis {
  ____ string urunler = 1;
}
Cevap
message Siparis {
  repeated string urunler = 1;
}

Açıklama: repeated anahtar kelimesi alanı liste yapar; Go'da []string olur.

3 proto ve Go

Kavram Anlamı
string ad = 1 Ad string
repeated int32 puan = 2 Puan []int32
message struct
service Arayüz (interface)

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