ADR-001: Birincil Dil Olarak Go
Durum
Kabul edildi (2026-04-04)
Bağlam
Consul Guardian için bir programlama dili seçmemiz gerekiyordu. Takımın derin .NET tecrübesi var, ancak araç DevOps/altyapı ekosistemine yönelik.
Değerlendirilen kriterler:
- Tek binary olarak dağıtım kolaylığı
- Consul ekosistemiyle uyum
- Eşlilik (concurrency) desteği
- Cross-platform derleme
- Docker image boyutu
Karar
Go birincil dil olarak seçildi.
Sonuçlar
Olumlu
- Tek binary deployment: Runtime bağımlılığı yok.
scpile kopyala, çalıştır - Consul ekosistemi uyumu: Resmi Go client (
hashicorp/consul/api) mevcut - Goroutine'ler: Her prefix için ayrı izleme goroutine'i, doğal eşlilik modeli
- Cobra/Viper: Go CLI'ları için endüstri standardı, zengin özellik seti
- Cross-compilation:
GOOS=linux GOARCH=arm64 go buildile tek satırda farklı platformlar - Küçük Docker image: scratch veya distroless base ile 10-15 MB image
Olumsuz
- Takımın Go öğrenme eğrisi (mevcut deneyim .NET üzerine)
- .NET tüketicileri için SDK ayrı bir çalışma gerektirir (Phase 2)
- Mevcut .NET kütüphaneleri doğrudan kullanılmaz
Değerlendirilen Alternatifler
| Dil | Avantaj | Dezavantaj | Neden seçilmedi |
|---|---|---|---|
| .NET | Takım tecrübesi | Ağır runtime, DevOps ekosistemiyle zayıf uyum | Dağıtım karmaşıklığı |
| Rust | En iyi performans | Dik öğrenme eğrisi, yavaş geliştirme | Prototipleme hızı |
| Python | En hızlı prototipleme | Tek binary yok, GIL eşlilik sorunu | Production dağıtım zorlukları |