CodeBlanks Logo Icon CodeBlanks

protoc ile derleme

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

protoc ile Go kodu üretmeyi öğrenirsin.

protoc ile derleme

.proto dosyası protoc derleyicisi ve iki Go eklentisiyle koda çevrilir: protoc-gen-go mesajları, protoc-gen-go-grpc servis arayüzlerini üretir.

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

protoc --go_out=. --go_opt=paths=source_relative \
  --go-grpc_out=. --go-grpc_opt=paths=source_relative \
  selam.proto

Çıktı: selam.pb.go ve selam_grpc.pb.go.

Üretilen kodu düzenleme

Üretilen .pb.go dosyaları elle düzenlenmez; değişiklik .proto'da yapılıp yeniden üretilir. Komutu her seferinde hatırlamamak için kaynak dosyaya bir yönerge eklenir ve go generate ./... çalıştırılır:

//go:generate protoc --go_out=. --go-grpc_out=. selam.proto

Buf gibi araçlar da derleme ve uyumluluk denetimini kolaylaştırır.

Uygulama Üretilen arayüz

protoc-gen-go-grpc'nin ürettiği sunucu arayüzünün sade hâlini yaz: type SelamlayiciServer interface { Selam(ad string) (string, error) }. Onu karşılayan type sunucu struct{} yaz ve var _ SelamlayiciServer = sunucu{} satırıyla derleme anında kontrol et; sonra sunucu{}.Selam("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 SelamlayiciServer interface {
    Selam(ad string) (string, error)
}

type sunucu struct{}

func (sunucu) Selam(ad string) (string, error) { return "Merhaba " + ad, nil }

var _ SelamlayiciServer = sunucu{}

func main() {
    fmt.Println(sunucu{}.Selam("Go"))
}

Beklenen çıktı

Merhaba Go <nil>

Soru ve cevaplar

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

1 Servis arayüzlerini (Server/Client) hangi eklenti üretir?

  • protoc-gen-go-grpc Doğru cevap
  • protoc-gen-go
  • go vet
  • gofmt

Açıklama: protoc-gen-go yalnızca mesaj türlerini üretir; istemci ve sunucu kodu protoc-gen-go-grpc'den gelir.

2 Mesaj çıktısı

Soru
protoc ____=. --go-grpc_out=. selam.proto
Cevap
protoc --go_out=. --go-grpc_out=. selam.proto

Açıklama: --go_out protoc-gen-go eklentisini çalıştırır ve mesaj kodunu üretir.

3 Araç ve çıktısı

Kavram Anlamı
protoc .proto derleyicisi
protoc-gen-go selam.pb.go
protoc-gen-go-grpc selam_grpc.pb.go
go generate Yönergeleri çalıştırır

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