Mülakat Hazırlığı: En Çok Sorulan Golang Teknik Soruları

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
183
Tepkime puanı
2
Puanları
18
Go mülakatları, dilin basitliğinin ardındaki derin mühendislik kararlarını ne kadar kavradığınızı ölçer. Mülakatçılar genellikle "nasıl" yapıldığından ziyade "neden" öyle tasarlandığına odaklanır.
İşte en sık sorulan teknik sorular ve stratejik cevap anahtarları:

1. Goroutine ve Thread Arasındaki Farklar Nelerdir?​

Bu soru, Go'nun eşzamanlılık (concurrency) modelini anlayıp anlamadığınızı test eder.
  • Boyut: Bir OS Thread yaklaşık 1-2 MB yığın (stack) belleği ile başlarken, bir Goroutine sadece 2 KB ile başlar ve ihtiyaca göre büyür/küçülür.
  • Yönetim: Thread'ler işletim sistemi (OS) tarafından yönetilir ve geçişleri (context switch) maliyetlidir. Goroutine'ler ise Go Runtime içindeki Go Scheduler tarafından kullanıcı seviyesinde yönetilir.
  • M:N Scheduling: Go, M sayıdaki Goroutine'i N sayıdaki OS Thread'i üzerinde çalıştırır.

2. "Channel" Yapısı Nedir ve "Buffered" ile "Unbuffered" Farkı Nedir?​

Go'nun felsefesini ("Belleği paylaşarak iletişim kurma, iletişim kurarak belleği paylaş") açıklamak için harika bir fırsattır.
  • Unbuffered (Tamponsuz): Gönderici ve alıcı aynı anda hazır olmalıdır (senkronize). Biri gelmeden diğeri bloklanır.
  • Buffered (Tamponlu): Kanalın belirli bir kapasitesi vardır. Kapasite dolana kadar gönderici bloklanmaz. Kapasite dolduğunda ise bir alıcı veriyi çekene kadar bekler.

3. Interface'ler Go'da Nasıl Çalışır? (Implicit Implementation)​

Go'da bir tipin bir interface'i uygulaması için "implements" anahtar kelimesine ihtiyacı yoktur.
  • Duck Typing: Eğer bir struct, bir interface'in beklediği tüm metodlara sahipse, o interface'i otomatik olarak uygulamış sayılır.
  • Empty Interface (interface{}): Herhangi bir tipi temsil edebilir çünkü her tip sıfır metod kuralına uyar. (Not: Go 1.18+ ile any takma adını kullanıyoruz).

4. Slice ve Array Arasındaki Fark Nedir?​

Bellek yönetimi ve performans optimizasyonu için kritik bir sorudur.
  • Array: Sabit boyutludur ve değer tipidir (değişken kopyalandığında tüm dizi kopyalanır).
  • Slice: Dinamik bir görünümdür (view). Arka planda bir Array'e işaret eder. Üç bileşeni vardır: Pointer, Length (Uzunluk) ve Capacity (Kapasite).

5. Context Paketi Ne İşe Yarar?​

Özellikle mikroservis ve HTTP sunucusu mülakatlarında vazgeçilmezdir.
  • İptal Sinyali: Bir isteğin (request) süresi dolduğunda veya kullanıcı bağlantıyı kestiğinde, bu sinyali alt fonksiyonlara ve veritabanı işlemlerine ileterek gereksiz CPU kullanımını önler.
  • Değer Taşıma: Request ID gibi meta-verileri katmanlar arasında taşır.

6. Map Yapısı Thread-Safe midir? Değilse Nasıl Çözülür?​

Go'nun standart map yapısı thread-safe değildir. Aynı anda birden fazla goroutine bir map'e yazmaya çalışırsa uygulama çöker (fatal error).
Çözüm Yolları:
  1. sync.Mutex veya sync.RWMutex kullanarak erişimi kilitlemek.
  2. Çok okunan, az yazılan senaryolar için sync.Map kullanmak.

Mülakat Puan Tablosu: Hangi Cevap Sizi Nereye Taşır?​

KonuOrta Seviye CevapKıdemli (Senior) Seviye Cevap
Hata Yönetimiif err != nil kullanırım.Error wrapping (fmt.Errorf ile %w) ve sentinel hatalardan bahseder.
Bağımlılıklargo get ile paket indiririm.go.mod ve go.sum dosyasının bütünlük korumasını açıklar.
Garbage CollectorOtomatik bellek temizler.GC'nin "Tri-color marking" algoritması ve STW (Stop The World) sürelerinden bahseder.

Stratejik İpucu: Kod Yazarken "Panic" Kullanmayın!​

Mülakatçı size "Hata durumunda ne yaparsınız?" diye sorduğunda, asla "Programı panic ile durdururum" demeyin (istisnai durumlar hariç). Go'da hataların değer olarak dönülmesi (return err) ve üst katmanda ele alınması beklenir.
 
Geri
Üst