Go 1.24'teki Yenilikler Nelerdir?
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 oluşturmak için daha da güçlü ve verimli hale getirmeyi amaçlamaktadır.
Performans Artışı
Temsili benchmark'lardan oluşan bir dizi genel performans iyileştirmesi ile CPU yükünde %2-3'lük bir azalma sağlanmıştır. Bu iyileştirmeler, yeni bir yerleşik map implementasyonu, küçük nesnelerin daha verimli bellek tahsisi ve yeni bir runtime-internal mutex implementasyonu içermektedir. Sonuçlar uygulamaya göre değişebilir.
Post-Quantum Kripto
ML-KEM-768 ve ML-KEM-1024'ü implemente eden crypto/mlkem
paketinin tanıtımı. ML-KEM, eskiden Kyber olarak bilinen ve FIPS 203'te belirtilen bir post-quantum anahtar değişim mekanizmasıdır. Bu ekleme, Go'yu kriptografik güvenliğin geleceğine hazırlamaktadır.
TLS İyileştirmesi
TLS'de Encrypted Client Hello (ECH) desteği. Bu özellik, Config.EncryptedClientHelloKeys
alanı doldurularak etkinleştirilebilir ve TLS bağlantıları için gizliliği ve güvenliği artırır.
Yeni Swiss Table Map
Daha iyi performans için geliştirilmiş bir map implementasyonu. Bu yeni implementasyon Swiss Tables'a dayanmaktadır ve GOEXPERIMENT=noswissmap
build flag'i ile devre dışı bırakılabilir.
Sync Map Güncellemesi
sync.Map
içindeki map modifikasyonları için geliştirilmiş performans. Ayrık anahtar kümelerinin modifikasyonları, daha büyük map'lerde çok daha az rekabete yol açar ve map'ten düşük rekabetli yükleri elde etmek için artık herhangi bir ramp-up süresi gerekmemektedir. Sorunlarla karşılaşırsanız, GOEXPERIMENT=nosynchashtriemap
kullanarak eski implementasyona geri dönebilirsiniz.
Geliştirilmiş JSON Marshaling
JSON marshaling sırasında daha akıllı struct alanı atlanması için yeni bir omitempty
tag seçeneği. Marshaling sırasında, omitempty
seçeneğine sahip bir struct alanı, değeri sıfır ise atlanacaktır. Alan tipi bir IsZero() bool
metoduna sahipse, bu metod değerin sıfır olup olmadığını belirlemek için kullanılacaktır.
Runtime Temizliği
Daha iyi kaynak yönetimi için SetFinalizer
yerine AddCleanup
fonksiyonunun tanıtımı. SetFinalizer
'dan farklı olarak, bağlı olduğu nesneyi nihai hale getirmek için yeniden canlandırmaz ve tek bir nesneye birden fazla cleanup eklenebilir. Yeni kod, SetFinalizer
yerine AddCleanup
'ı tercih etmelidir.
go.mod'daki Araç Direktifleri
go.mod
'daki araç direktifleri kullanılarak geliştirilmiş yürütülebilir bağımlılık takibi. Bu, araçları geleneksel olarak "tools.go" adlı bir dosyaya boş import olarak ekleme şeklindeki önceki geçici çözüm ihtiyacını ortadan kaldırmaktadır.
Dizin Sınırlı Erişim
Kontrollü dosya sistemi işlemleri için yeni os.Root
tipi. os.Root
tipi, belirli bir dizin içinde dosya sistemi işlemleri gerçekleştirme yeteneği sağlayarak belirtilen yolun dışına erişimi engeller.
Test İyileştirmeleri
Eşzamanlı kod testi için yeni testing/synctest
paketi. synctest.Run
fonksiyonu, izole bir "bubble" içinde bir goroutine grubunu başlatır ve synctest.Wait
fonksiyonu, mevcut bubble'daki tüm goroutine'lerin bloklanmasını bekler. Bu paket deneyseldir ve build zamanında GOEXPERIMENT=synctest
ayarlanarak etkinleştirilmelidir.
Build Cache
go run
yürütülebilir dosyaları artık daha hızlı yürütme için önbelleğe alınmaktadır. Bu, önbelleği büyütme pahasına tekrarlanan yürütmeleri hızlandırır.
Cgo Performansı
Daha iyi Cgo performansı için yeni #cgo noescape
ve #cgo nocallback
anotasyonları. #cgo noescape cFunctionName
derleyiciye C fonksiyonuna geçirilen belleğin kaçmadığını söyler. #cgo nocallback cFunctionName
derleyiciye C fonksiyonunun herhangi bir Go fonksiyonuna geri çağrı yapmadığını söyler.
Zayıf İşaretçiler
Geri kazanımı engellemeden belleği güvenli bir şekilde referanslamak 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 oluşturmayı sağlamak için sağlanan düşük seviyeli bir ilkeldir.
Benchmark İyileştirmesi
Daha hızlı, daha az hataya açık benchmark'lar için yeni testing.B.Loop
metodu. Benchmark fonksiyonu, her -count
için tam olarak bir kez yürütülecek, böylece pahalı kurulum ve temizleme adımları yalnızca bir kez yürütülecektir. Fonksiyon çağrı parametreleri ve sonuçları canlı tutularak, 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.