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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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ı
message Siparis {
____ string urunler = 1;
}
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) |