# Go geliştiricisi — performans ve dayanıklılığın dili

> Go ile ne geliştiriyorum: mikroservisler, kuyruk tüketen consumer'lar, HTTP API'lar ve komut satırı araçları — Go'yu hangi işte neden seçtiğim.

- Teknolojiler: Cobra, go-git, Goreleaser, Gin, Fiber
- Deneyim: 2018'den bu yana
- Yazı: 19
- Proje: 4
- Güncelleme: 2026-09-02
- Kaynak: https://www.muhammetsafak.com.tr/uzmanlik/go/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
## Go ekosisteminde ben

Go benim için başka bir dilin alternatifi değil, belirli bir problem sınıfının
cevabı. Karşı tarafta kurulum istemeyen, uzun süre ayakta kalan ve kaynağı ucuz
kullanan bir servis ya da araç gerektiğinde ilk başvuru noktam burası.

Dili probleme göre seçiyorum, sevdiğim için değil. Sistem tasarımının kendisini
maliyetleriyle birlikte [sade.dev](https://sade.dev) tarafında yazıyorum.

### Go ile ne geliştiriyorum

Ortak noktaları tek işi olan, uzun süre ayakta kalan ve kaynağı ucuz kullanan süreçler olmaları.

- **Mikroservisler** — Tek sorumluluğu olan, kendi başına ölçeklenen ve ayrı dağıtılan servisler.
- **Consumer ve worker'lar** — Kuyruktaki işi günlerce kesintisiz tüketen, arka planda çalışan süreçler.
- **HTTP API'lar** — Web ve mobili aynı anda besleyen servisler; önce standart kütüphane, gerektiğinde Gin ya da Fiber.
- **Komut satırı araçları** — Tek dosya olarak dağıtılan, karşı tarafta kurulum gerektirmeyen programlar.

### Neden Go

1. **Tek dosya** — go build tek bir çalıştırılabilir üretiyor. Karşı tarafta ayrıca kurulması gereken bir yorumlayıcı ya da bağımlılık dizini kalmıyor — ne sunucuda, ne konteyner imajında, ne de bir başkasının makinesinde.
2. **Cross-platform** — Aynı kaynak Linux, macOS ve Windows için tek komutla derleniyor. Hedef değiştiğinde kod değişmiyor.
3. **Eşzamanlılık dilin içinde** — goroutine ve channel modeli, paralel çalışan bir consumer'ı üçüncü parti bir kütüphaneye devretmeden yazmayı mümkün kılıyor.
4. **Öngörülebilirlik** — Sade sözdizimi ve açık hata yönetimi, kodu altı ay sonra okuyan kişinin işini kolaylaştırıyor — ki bu kişi çoğu zaman işi devralan ekip oluyor.

### Standart kütüphaneyle çözülen işe paket almıyorum

Go tarafındaki işlerin ömrü çoğu zaman yazıldıkları günden uzun oluyor ve bunu mümkün kılan şey yalnızca dil değil, kısa tutulan bağımlılık listesi. Her bağımlılık, ileride başkasının bakmak zorunda kalacağı bir yüzey demek; davranışı gizleyen bir yapı da aynı sınıfta bir borç.

### Teslim işin diğer yarısı

Bir servisi ya da aracı yazmak yarısı; ikinci yarısı olmadan yazılan şey yalnız benim makinemde çalışır. Go tarafındaki işlerde bu ikinci yarıyı da kuruyorum.

- **Çapraz derleme** — Aynı kaynaktan üç hedef için çıktı — Linux, macOS, Windows.
- **Sürüm gömme** — Sürüm bilgisi derleme anında ldflags ile ikilinin içine giriyor.
- **İmzalı çıktı** — Dağıtılan ikili imzalanıyor; karşı taraf ne indirdiğini doğrulayabiliyor.
- **Kurulum yolu** — Kurulum bir dosya indirme adımı değil, paket yöneticisine düşen tek komut.

### Aracın karşı tarafı

Aracı kullanan kişi çoğu zaman onu yazan kişi değil; yüzeyi ona göre kuruyorum.

- **Okunabilir komut ağacı** — Komutun ne yaptığı, yardım metnine bakmadan adından anlaşılmalı.
- **Tahmin edilebilir bayraklar** — Aynı bayrak her komutta aynı anlama geliyor; sürpriz davranış bir hata sınıfıdır.
- **Ne yapılacağını söyleyen hata** — Hata mesajı neyin yanlış olduğunu değil, kullanıcının bundan sonra ne yapması gerektiğini söylüyor. Aynı ölçü servis tarafında da geçerli.

### Her işin dili Go değil

Ağır iş kuralları, olgun bir yönetim paneli ya da geniş bir paket ekosistemi isteyen bir ürün için PHP ve Laravel hâlâ daha hızlı yol aldırıyor. Dili probleme göre seçiyorum, sevdiğim için değil — polyglot çalışmanın asıl maliyeti yeni dil öğrenmek değil, bağlam değiştirmek.

## Sık sorulanlar

### Go'yu kaç yıldır kullanıyorsun?

2018'den bu yana, 8 yıldır. Bu sürenin tamamı PHP'nin yanında geçti: Go bende bir dilin yerini almadı, belirli bir problem sınıfının cevabı olarak duruyor.

### Go'yu neden öğrendin?

Polyglot olmak bir hedef değildi; belirli bir problem sınıfı için doğru cevabın elimde olmamasıydı. Go statically typed, derleniyor, standart kütüphanesi geniş ve sözdizimi kasıtlı olarak sade. PHP'yi onunla değiştirmeyi hiç düşünmedim — derinliğim orada kaldı, Go genişliği temsil etti.

### Go ile ne geliştiriyorsun?

Mikroservisler, kuyruktan iş tüketen consumer ve worker'lar, HTTP API'lar ve komut satırı araçları. Ortak noktaları tek işi olan, uzun süre ayakta kalan ve kaynağı ucuz kullanan süreçler olmaları. Bu sitede Go etiketli 19 yazı var.

### Web servisi de yazıyor musun, yoksa yalnız CLI mı?

İkisini de. HTTP tarafında önce standart kütüphaneyle başlıyorum; `net/http` bir API'yi üretime çıkarmaya çoğu zaman yetiyor. Middleware zinciri, rota gruplama ya da hazır bağlama gerektiğinde Gin veya Fiber giriyor.

### Teslim tarafında ne yapıyorsun?

İşin yarısı orada. Çapraz derleme, sürüm bilgisinin ldflags ile ikiliye gömülmesi, imzalanmış çıktı ve kurulum yolu — bunlar olmadan yazılan şey yalnız benim makinemde çalışır.

### Go ile PHP arasında nasıl geçiş yapıyorsun?

Bedeli var ve onu yazdım: polyglot bir kod tabanını sürdürmenin asıl maliyeti dil öğrenmek değil, bağlam değiştirmek. İki dilin aynı anda açık olduğu günlerde hata oranım yükseliyor.

### Kaç projede Go kullandın?

Bu sitede kayıtlı projelerin 4 tanesinde Go var: kimisinde baştan sona, kimisinde servis ya da SDK tarafında.
