11 puan yazan GN⁺ 2025-11-16 | 1 yorum | WhatsApp'ta paylaş
  • Go dilinin açık kaynak olarak yayımlanmasının 16. yılı vesilesiyle, son 1 yıldaki başlıca teknik gelişmeler ve gelecek planları özetleniyor
  • Go 1.24 ve 1.25 sürümlerinde test, güvenlik ve performans genelinde büyük çaplı iyileştirmeler yapıldı
  • synctest, container-aware scheduling, flight recorder gibi özelliklerle üretim ortamında güvenilirlik ve verimlilik güçlendirildi
  • Kriptografi paketleri için FIPS 140-3 sertifikasına hazırlık, Green Tea GC gibi gelişmelerle güvenlik ve performans artırıldı
  • Go ekosistemi yapay zeka entegrasyonlu geliştirme ve modern kod otomasyonu ile genişliyor; gelecekte büyük ölçekli donanım ve yapay zeka desteğinin daha da güçlendirilmesi planlanıyor

Go'nun 16. yılı ve son sürümlere genel bakış

  • 10 Kasım'da Go'nun açık kaynak olarak yayımlanmasının 16. yılı kutlandı
  • 2024 Şubat'ta Go 1.24, Ağustos'ta ise Go 1.25 düzenli sürüm takvimine uygun olarak yayımlandı
  • Bu iki sürüm, yüksek güvenilirlikli yazılım geliştirme için API'ler, güvenlik güçlendirmeleri ve çalışma zamanı performans iyileştirmeleri içeriyor
  • Go ekibi, üretken yapay zeka çağındaki değişime yanıt olarak Go tabanlı yapay zeka entegrasyonu, ajanlar ve altyapı geliştirme çalışmalarını ilerletiyor

Temel dil ve standart kütüphane iyileştirmeleri

  • Go 1.24'te deneysel olarak sunulan ve 1.25'te resmileştirilen testing/synctest paketi, asenkron ve paralel kod testlerini basitleştiriyor
    • Zaman sanallaştırması sayesinde yavaş veya kararsız testleri güvenilir ve anında çalışan testlere dönüştürüyor
    • Go çalışma zamanı ve standart kütüphane ile derin biçimde entegre bir yapıya sahip
  • testing.B.Loop API'si, mevcut benchmark API'sinin (B.N) kullanım kolaylığını artırıyor ve geleneksel tuzakları ortadan kaldırıyor
  • Context tabanlı test temizleme ve log çıktısı API'leri eklendi; böylece test yönetimi daha verimli hale geldi
  • Go 1.25, container-aware scheduling sunarak konteyner içindeki paralel işlemeyi otomatik olarak ayarlıyor
    • CPU throttling'i önlüyor ve gecikmeyi iyileştiriyor
  • flight recorder özelliği, yürütme izleyicisini genişleterek hata oluştuktan önceki olayların ayrıntılı biçimde kaydedilmesini sağlıyor

Güvenlik odaklı yazılım geliştirme

  • Go'nun kriptografi paketlerinde, bağımsız güvenlik şirketi Trail of Bits tarafından yapılan denetimde yalnızca düşük önem derecesine sahip tek bir sorun bulundu
  • Go Security Team ile Geomys iş birliği sayesinde CAVP sertifikası alındı ve FIPS 140-3 sertifikası için hazırlık tamamlandı
    • Bu durum, düzenlemeye tabi ortamlarda Go'nun kullanılabilirliğini artırıyor ve mevcut gayriresmî çözümlere bağımlılık sorununu azaltıyor
  • Go standart kütüphanesi, varsayılan olarak güvenli tasarım (safe by default) yönünde gelişiyor
    • Go 1.24'teki os.Root API'si, dosya sistemi erişiminde yol geçişi zafiyetlerini önlüyor

İç yapı ve performans iyileştirmeleri

  • Go 1.24'te map uygulaması tamamen yeniden tasarlandı ve modern hash tablosu tasarımları benimsendi
    • Performans arttı, gecikme azaldı ve bellek verimliliği iyileşti
  • Go 1.25'teki Green Tea çöp toplayıcısı, GC ek yükünü %10 ila %40 azalttı
    • Modern donanıma uygun yeni algoritmalar uygulandı
    • Go 1.26'da AVX-512 destekli donanımlarda ek %10 iyileştirme planlanıyor
    • Go 1.26'dan itibaren varsayılan olarak etkinleştirilmesi bekleniyor

Geliştirme yığınının genişlemesi ve yapay zeka entegrasyonu

  • Go, bir dilden öte tam kapsamlı bir geliştirme platformuna dönüşüyor
  • gopls dil sunucusu, 4 düzenli sürümle (v0.17~v0.20) yeteneklerini genişletti
    • Kod analizörleri, refactoring, JSON etiket işleme, yerleşik MCP sunucusu gibi özellikler eklendi
  • Otomatik kod modernizasyonu (modernizer) özelliği tanıtıldı
    • Eski kod kalıplarını modern ve daha güvenli biçimlere otomatik dönüştürüyor
    • IDE öneri özellikleriyle entegre çalışarak tutarlı kod korunmasına ve yapay zeka destekli öğrenmeye yardımcı oluyor
    • Go 1.26'da go fix komutunun modernizer'ın tamamını topluca uygulayacak şekilde yeniden düzenlenmesi planlanıyor
  • Anthropic ve topluluk iş birliğiyle, Model Context Protocol (MCP) için resmî Go SDK v1.0.0 yayımlandı
    • MCP istemci ve sunucu desteği sunuyor; gopls'in MCP özellikleri üzerine kurulu
    • Google'ın ADK for Go aracı, MCP SDK üzerinde çok ajanlı sistem geliştirme çerçevesi sağlıyor
    • Go'nun eşzamanlılık, performans ve güvenilirlik özelliklerinin üretim seviyesinde yapay zeka geliştirmeye uygun olduğunu gösteriyor

Gelecek planları ve topluluk

  • Green Tea GC'nin genel kullanıma sunulması, SIMD donanım desteği ve çok çekirdekli ölçeklenebilirliğin güçlendirilmesi planlanıyor
  • encoding/json için büyük çaplı yükseltme, goroutine sızıntısı profilleme, net/http ve unicode iyileştirmeleri üzerinde çalışılıyor
  • Go ile yapay zekanın birleşimi için dil, araç ve tanı sistemleri genişletiliyor
  • Go açık kaynak projesi, katkıcı topluluğunu büyütmeyi ve geliştirme sürecinin ölçeklenebilirliğini artırmayı hedefliyor
  • Go'nun gelişimi, kullanıcı ve katkıcı topluluğunun katkılarına dayanıyor ve gelecekte de sürdürülebilir büyümeye işaret ediyor

1 yorum

 
GN⁺ 2025-11-16
Hacker News yorumları
  • Go'yu gerçekten çok seviyorum. Özellikle monorepo ortamında parlıyor. Yeni bir uygulama eklerken tek yapman gereken bir klasör oluşturup içine main() fonksiyonu olan bir go dosyası koymak. Kök dizinde go install ./... çalıştırınca her şey hızlıca derleniyor
    Hızlıca bir CLI programı çıkarmam gerektiğinde bu sadelik tam anlamıyla dahice oldu

    • Diğer dillerde de aşağı yukarı bunu yapmak mümkün değil mi diye düşünüyorum
    • Bu tür monorepo kullanım örneklerinin daha sık anılması gerektiğini düşünüyorum
  • Eskiden dilin darboğaz olmadığı söylenirdi ama Go'yu ilk gördüğümde “bu farklı” diye düşünmüştüm. Öğrenmesi de gerçekten çok hızlı — sanırım dil spesifikasyonu küçük olduğu için.
    Hissedilen şu: Rust'un sunduğunun %80'ini %20 çabayla alıyorsun

    • Go'nun güzel yanı, tüm dili kısa sürede tamamen öğrenebilmen. Eşzamanlılık ve tuzaklar dahil her şeyi kavrayabiliyorsun. Buna karşılık C# ya da C++ o kadar karmaşık ki, tamamını anlayan insan neredeyse yok
    • Rob Pike'ın dediği gibi Go, junior geliştiriciler için tasarlanmış bir dil. Google içinde derleme sürelerini düşürme amacı da büyüktü. Bu yüzden kullanılmayan bağımlılıklar varsa derleme hatası veriyor (kaynak)
    • Dil spesifikasyonunun küçük olması illa basit olduğu anlamına gelmiyor. Örneğin Swift'in spesifikasyonu büyük ama gevşek tanımlı. Hatta Go spesifikasyonuna bakarken tamsayı literal sözdiziminde hata bile bulmuştum
    • Ama Rust'ta kalan o %20'lik özellikler, faydanın %80'ini oluşturuyor olması açısından eksik hissettiriyor
    • Üstelik Go da giderek daha karmaşık hale geliyor. Mesela generics eklendikten sonra sadeliği azaldı
  • Bana göre Go, aşırı sadeleştirilmiş bir Rust gibi. Kodun otomatik düzeltilmesi, döngülerin dayatılması, map anahtarının varlığını kontrol etmenin hantallığı rahatsız edici.
    Dizi işleme ya da enum tanımı da tuhaf, bir de şirketin linter kuralları yüzünden kod bölünüp parçalanıyor ve neredeyse enterprise Java gibi oluyor.
    Yine de arayüzler basit ve öğrenmesi hızlı.
    Eğer Go'da düzgün enum, doğal slice sözdizimi, iterator, sonuç açma için kısa sözdizimi olsaydı çok daha iyi olurdu

    • Go'nun eksilerinden biri kısa değişken adı kültürü. Struct'ın ilk alanının miras gibi davranması ya da erişim denetiminin büyük/küçük harfle yapılması da rahatsız edici.
      Varsayılan json kütüphanesi de boş slice'ları null olarak serileştirmek gibi pek çok sorun taşıyor.
      Yine de tooling hızı çok iyi, pratikliğini inkâr edemem
    • Go'nun lexer/parser'ını fork edip Result[T]/Option[T], sum type, iterator, tuple gibi şeyler eklediğim deneysel bir dil yaptım (agl projesi)
    • Go'da aslında enum var. Sadece sum type yok. Dizi ve slice'lar C ile neredeyse aynı, sadece yeterince “sihir” olmadığı için daha kafa karıştırıcı görünmüş olabilir.
      Sonuç açma konusu toplulukta uzun zamandır tartışılıyor ama henüz temiz bir çözüm yok
    • Aslında Go'da zaten iter paketi ve slices.Delete var.
      Bir dizinin ortasından sık sık eleman siliyorsan, yanlış veri yapısını seçmişsindir
    • slices.Delete ile silme yapılabiliyor ve if err != nil zorunluluğu gibi şeyler dil sorunu değil, takım kuralı sorunu
  • Go'nun Apple II için çıktığını sanıp kısa süreliğine heyecanlanmıştım (SWEET16 referansı)

  • Yeni bir Go kod tabanına katkı yapmak kolay.
    Dilin sadeliği ve gofmt, golangci-lint gibi standart araçlar sayesinde tüm kod tabanları benzer bir yapıya sahip oluyor.
    Başka dil topluluklarındaki gibi build aracı tartışmaları yok

    • Birlikte çalıştığım bilim insanlarını kod biçimlendirici ve linter kullanmaya ikna etmeye çalışıyorum. Go'nun bunu zorunlu kılması bence iyi bir karardı
    • Go öğrenmeye daha yeni başladım ama “tek bir şekilde yapma” felsefesi hoşuma gidiyor.
      Yalnız % operatörünün negatif sayılardaki davranışı kafamı karıştırdı
  • Otomatik kod modernizasyon aracı (modernizer) fikri ilginç.
    gopls v0.18.0 ile birlikte sözdizimi analizi yaparak eski deyimleri bulup daha hızlı ve daha güvenli koda otomatik dönüştürüyor.
    gofmt nasıl stil tutarlılığı sağladıysa, modernizer da deyim tutarlılığı sağlayacak

  • golangci-lint içinde exhaustive, exhaustruct, wrapcheck gibi linter'ları açınca güvenlik ciddi biçimde artıyor ve geliştirme hızı yükseliyor

  • Şirketimizde Go backend geliştiricileri için 10 haftalık onboarding programı yürütüyoruz (plan bağlantısı)
    Python'dan Go'ya geçeli 7 yıl oldu ve bu, startup başarımızın temel etkenlerinden biriydi

    • Yalnız Go ile ilgili ilanların çoğu DevOps bilgisi (AWS, Kubernetes, CI/CD) istiyor. Salt yazılım mühendisliği pozisyonları nadir
    • Doğrudan bağlantı
  • Başta Go'ya şüpheyle yaklaşıyordum ama şimdi en sevdiğim dil oldu. Basit ama güçlü.
    Yine de null kontrolü, hata stack trace'leri, sum type için exhaustive kontrol yerleşik gelse iyi olurdu

    • Null kontrol aracı olarak NilAway geliştiriliyor
    • Sum type denetimi golangci-lint ile yapılabiliyor
  • Go, fonksiyonel programlama tarafında biraz daha özellik sunsa neredeyse kusursuz olurdu.
    Özellikle değişmezlik, null yönetimi, switch exhaustiveness eksik hissettiriyor.
    Bunu telafi etmek için Uber'in NilAway aracını kullanıyorum ama tür sistemi seviyesinde desteklenmesi daha iyi olurdu

    • Borgo diye bir proje var ama hâlâ olgunlaşmamış durumda
    • Sum type ve nil pointer'sız Go hayal ediyorum. Gleam o yöne daha yakın ama fazla farklı bir yola sapmış durumda