İçeriğe geç
Muhammet Şafak
en
Günlük 2 dk okuma

Polyglot'a ilk adım: neden Go öğrenmeye başladım

On yılı aşkın PHP deneyiminin ardından neden ikinci bir dil öğrenmeye karar verdim? Go'yu seçmemin gerekçesi ve bu süreçten beklentilerim.

Kapak görseli — masada solda yıpranmış gri Programming PHP kitabı, sağda mor ışık huzmesi altında gopher kapaklı The Go Programming Language

Bu yazı 7 yıl önce yazıldı — o günün koşullarını yansıtır.


2008’den bu yana PHP yazıyorum. On bir yıl. Bu sürede PHP ile ne yapılabileceğinin oldukça geniş bir fotoğrafını çektim: web uygulamaları, API’ler, CLI araçlar, arka plan işleri. Bu yolun beni ilk götürdüğü yer, dilin en çok merak ettiğim tarafı oldu: goroutine ve channel ile eşzamanlılık.

Ekosistemi tanıyorum, araçlarını biliyorum, tuzaklarını içselleştirdim. Bu konforu kırmak için bilinçli bir karar almam gerekiyordu — ve aldım.

Neden şimdi? Neden Go?

Tek dilin konforunun farkına varmak

Bir noktada şunu fark ettim: aynı problemi her zaman aynı araçla çözüyordum. Senaryo fark etmeksizin, PHP + Laravel benim varsayılan yanıtım oluyordu. Bu alışkanlık verimlilik sayılabilir, ama zamanla düşünce esnekliğini köreltiyor.

İkinci dil öğrenmek, yalnızca bir araç kazanmak değil. Başka bir dilin yapısına girdiğinizde, ana dilinizi de farklı görmeye başlıyorsunuz. PHP’nin tasarım kararlarını — ya da tasarım borçlarını — dışarıdan değerlendirme fırsatı doğuyor.

Neden Go?

Python, Ruby, Node.js — hepsi seçenek olabilirdi. Bir süre değerlendirdim.

Go’yu seçmemin somut gerekçeleri:

Go, statically typed ve derlenen bir dil. PHP’de tip bildirimleri son yıllarda güçlendi ama dinamik yapı hep orada. Statik tipler, büyük kod tabanlarında derleme anında hata yakalama sağlıyor — bunu deneyimlemek istiyordum.

Go’nun standart kütüphanesi kapsamlı. HTTP sunucusu, JSON işleme, concurrency için ihtiyaç duyduğunuz şeylerin büyük bölümü dilde hazır geliyor. PHP’de her şey için dış paket aradığımı düşününce bu fark ilgimi çekti.

Go’nun sözdizimi kasıtlı olarak sade tutulmuş. Çok az soyutlama, çok az “sihir”. Bir dilin öğrenme sürecinde en kötü şey, sihirli davranışları çözmeye zaman harcamak. Go’da bunu yaşamayacağımı umuyorum.

Son olarak: Go’nun concurrency modeli farklı. Goroutine ve channel kavramları PHP’nin multi-process yaklaşımından temelden ayrılıyor. Bu zihin genişletici bir alan gibi görünüyor.

Ne beklemiyorum?

PHP’yi Go ile değiştirmeyi düşünmüyorum. Web uygulamaları için Laravel ekosisteminin olgunluğuna yaklaşmak yıllar alır. Amacım, belirli problem kategorilerinde — CLI araçlar, veri işleme betikleri, küçük servisler — Go’nun ne zaman daha doğru seçim olduğunu anlamak.

Aynı zamanda “hızlıca uzman olacağım” gibi bir beklentim de yok. On yıllık PHP birikimini Go ile aynı seviyeye taşımak mümkün değil ve gerekli de değil. T-shaped bilgi: derinliğim PHP’de, Go ise genişliği temsil edecek.

Şimdiye kadar ne gördüm?

İlk birkaç hafta go kurulumu, temel sözdizimi, paket yapısı. İlk şaşkınlık: err kontrolü her yerde tekrar ediyor.

package main

import (
    "fmt"
    "os"
)

func main() {
    f, err := os.Open("dosya.txt")
    if err != nil {
        fmt.Println("Hata:", err)
        return
    }
    defer f.Close()
    fmt.Println("Dosya açıldı:", f.Name())
}

PHP’deki exception tabanlı hata yönetiminden gelince bu tekrar garip geliyor. Ama Go’nun tasarımcıları bunun bilinçli bir karar olduğunu açıkça belirtiyor: hata değer (error value) olarak birinci sınıf vatandaş. İlk tepkim negatifti, ama bu yaklaşımın avantajlarını görmek için daha fazla yazmam gerekiyor.

Sonraki aylarda küçük bir CLI aracı yazmayı planlıyorum. Gerçek bir ihtiyacı karşılayan küçük bir şey — dilin nasıl hissettirdiğini en iyi öğreten yol bu.

Bu konudaki deneyler

Uygulama ile sağlayıcı arasında duran, tek OpenAI uyumlu API sunan ve isteğe RAG bağlamını kendisi ekleyen self-hosted Go gateway.

Şu an ne yapıyor

Uygulamanın tek bir OpenAI uyumlu uca konuşmasını, isteğin hangi modele gideceğini ve — bir doküman havuzu bağlıysa — hangi dokümanlardan bağlam alacağını projenin ayarının belirlemesini sağlıyor. Sağlayıcı anahtarını uygulamalara dağıtmak istemeyen ve harcamayı proje başına sınırlamak isteyen herkes kendi sunucusunda çalıştırabilir.

Open-Source Web Go PostgreSQL pgvector +8 daha
Ağustos 2026 — Eylül 2026

Dile özgü serileştirme yerine dondurulmuş bir JSON zarfı; polyglot kuyruk standardı BabelQueue'ya dönüştü.

Şu an ne yapıyor

Dondurulmuş JSON zarfı dört dilde — PHP, Python, Go, Node.js — aynı baytları okutuyor; sidecar ya da broker eklentisi gerekmiyor. Polyglot kuyruk kuran ekipler spesifikasyonu ve SDK'ları bugün kullanabilir.

Open-Source JSON Redis RabbitMQ +4 daha
Mart 2026 — Haziran 2026

Yorumlar

Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.

İlgili Yazılar

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi