Ana içeriğe geç

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. scp ile 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 build ile 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

DilAvantajDezavantajNeden seçilmedi
.NETTakım tecrübesiAğır runtime, DevOps ekosistemiyle zayıf uyumDağıtım karmaşıklığı
RustEn iyi performansDik öğrenme eğrisi, yavaş geliştirmePrototipleme hızı
PythonEn hızlı prototiplemeTek binary yok, GIL eşlilik sorunuProduction dağıtım zorlukları