Go 1.24 Sürüm Genel Bakışı: Swiss Table Maps, ML-KEM, os.Root ve testing/synctest

Go 1.24, performans, güvenlik ve geliştirici deneyimine odaklanan bir dizi iyileştirme sunarak önemli bir sürüm olmaya hazırlanıyor. Bu değişiklikler, Go'yu modern uygulamalar geliştirmek için daha da güçlü ve verimli hale getirmeyi amaçlamaktadır.
Performans Artışı
Temsili bir kıyaslama paketi genelinde CPU yükünde %2-3 oranında azalma sağlayan genel bir performans iyileştirmesi. Bu iyileştirmeler, yeni yerleşik bir map uygulamasını, küçük nesnelerin daha verimli bellek tahsisini ve yeni bir çalışma zamanı içi mutex uygulamasını kapsamaktadır. Sonuçlar uygulamaya göre değişebilir.
Kuantum Sonrası Kriptografi
ML-KEM-768 ve ML-KEM-1024'ü uygulayan crypto/mlkem paketinin tanıtımı. ML-KEM, daha önce Kyber olarak bilinen ve FIPS 203'te belirtilen, kuantum sonrası bir anahtar değişim mekanizmasıdır. Bu ekleme, Go'yu kriptografik güvenliğin geleceğine hazırlamaktadır.
TLS Geliştirmesi
TLS'de Şifreli Client Hello (ECH) desteği. Bu özellik, Config.EncryptedClientHelloKeys alanı doldurularak etkinleştirilebilir ve TLS bağlantıları için gizlilik ve güvenliği artırır.
Yeni Swiss Table Map
Daha iyi performans için geliştirilmiş bir map uygulaması. Bu yeni uygulama Swiss Tables temelli olup, GOEXPERIMENT=noswissmap derleme bayrağı ile devre dışı bırakılabilir.
Sync Map Güncellemesi
sync.Map içindeki map değişiklikleri için geliştirilmiş performans. Büyük map'lerde birbirinden ayrık anahtar kümelerinin değiştirilmesi çekişmeye (contention) girme olasılığı çok daha düşüktür ve map'ten düşük çekişmeli yüklemeler elde etmek için artık herhangi bir ısınma süresi gerekmemektedir. Sorunlarla karşılaşırsanız, GOEXPERIMENT=nosynchashtriemap kullanarak eski uygulamaya geri dönebilirsiniz.
Geliştirilmiş JSON Marshaling
JSON marshaling sırasında struct alanlarının daha akıllı bir şekilde atlanmasını sağlayan yeni bir omitempty etiket seçeneği. Marshaling sırasında, omitempty seçeneğine sahip bir struct alanının değeri sıfır ise o alan atlanır. Alan türünün IsZero() bool metodu varsa, değerin sıfır olup olmadığını belirlemek için bu metot kullanılır.
Çalışma Zamanı Temizliği
SetFinalizer yerine kaynak yönetimini iyileştirmek için AddCleanup fonksiyonunun tanıtımı. SetFinalizer'dan farklı olarak, bağlı olduğu nesneyi sonlandırma için yeniden canlandırmaz ve tek bir nesneye birden fazla temizleme işlemi eklenebilir. Yeni kodda SetFinalizer yerine AddCleanup tercih edilmelidir.
go.mod'da Araç Yönergeleri
go.mod içindeki araç yönergeleri kullanılarak geliştirilmiş çalıştırılabilir bağımlılık takibi. Bu, araçların "tools.go" olarak adlandırılan bir dosyaya boş içe aktarmalar olarak eklenmesi yönündeki önceki geçici çözüm ihtiyacını ortadan kaldırır.
Dizin Sınırlı Erişim
Denetimli dosya sistemi işlemleri için yeni os.Root türü. os.Root türü, belirli bir dizin içinde dosya sistemi işlemleri gerçekleştirme olanağı sağlayarak belirtilen yol dışındaki erişimi engeller.
Test İyileştirmeleri
Eşzamanlı kodu test etmek için yeni testing/synctest paketi. synctest.Run fonksiyonu, yalıtılmış bir "balon" içinde bir grup goroutine başlatır ve synctest.Wait fonksiyonu, mevcut balondaki tüm goroutine'lerin bloke olmasını bekler. Bu paket deneyseldir ve derleme zamanında GOEXPERIMENT=synctest ayarlanarak etkinleştirilmelidir.
Derleme Önbelleği
go run ile çalıştırılan programlar artık daha hızlı yürütme için önbelleğe alınmaktadır. Bu, tekrarlanan yürütmeleri hızlandırırken önbelleğin boyutunu artırmanın bedelini getirmektedir.
Cgo Performansı
Daha iyi Cgo performansı için yeni #cgo noescape ve #cgo nocallback açıklamaları. #cgo noescape cFunctionName, C fonksiyonuna geçirilen belleğin kaçmadığını (escape etmediğini) derleyiciye bildirir. #cgo nocallback cFunctionName, C fonksiyonunun herhangi bir Go fonksiyonunu geri çağırmadığını derleyiciye bildirir.
Zayıf İşaretçiler
Bellek geri kazanımını engellemeden belleğe güvenli bir şekilde başvurmak için zayıf işaretçi desteği. Zayıf işaretçiler, değerleri ilişkilendirmek için zayıf map'ler, kanonikleştirme map'leri ve çeşitli önbellek türleri gibi bellek açısından verimli yapıların oluşturulmasını sağlamak üzere sunulan düşük seviyeli bir ilkeldir.
Kıyaslama İyileştirmesi
Daha hızlı ve daha az hataya açık kıyaslamalar için yeni testing.B.Loop metodu. Kıyaslama fonksiyonu, her -count için tam olarak bir kez yürütülür, bu nedenle pahalı kurulum ve temizleme adımları yalnızca bir kez çalışır. Fonksiyon çağrı parametreleri ve sonuçları canlı tutulur, böylece derleyicinin döngü gövdesini tamamen optimize etmesi engellenir.
Go 1.24, dilin ve ekosisteminin çeşitli yönlerinde önemli iyileştirmeler sunarak önemli bir sürüm olmaya hazırlanıyor.
