GoSuda

Go 1.24'teki Yenilikler Nelerdir?

By Lemon Mint
views ...

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.

Go 1.24'e Genel Bakış