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.protoBuf 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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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ı
protoc ____=. --go-grpc_out=. selam.proto
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 |