Go 1.21 Yenilikleri

Merhaba, bu makalede Go programlama diline Ağustos ayında gelen 1.21 sürümündeki yenilik ve güncellemeleri örnek kullanımlarla birlikte aktarıyor olacağım.

Dil Değişiklikleri

Go 1.21 sürümü ile min, max ve clear olmak üzere 3 yeni yerleşik (built-in) fonksiyon eklendi. İsimlerinden de anlaşılacağı üzere min fonksiyonu kendisine parametre olarak verilen değerler arasından en küçük olanı döndürürken max fonksiyonu kendisine verilen parametreler arasından en büyük değeri döndürmektedir. clear fonksiyonu ise parametre olarak map, slice ve type parameter alarak bunların tüm öğelerini siler veya sıfırlar. Bu fonksiyonlara birer örnek verecek olursak;

Go Komutu ve Flag Güncellemeleri

  • -pgo derleme flag’i varsayılan olarak -pgo=auto olarak ayarlandı.
  • Komut satırında yalnızca tek bir ana paketi belirtme kısıtlaması kaldırıldı.
  • Ana paketin dizininde default.pgo adında bir dosya bulunuyorsa bu dosya otomatik olarak optimizasyonu etkinleştirmek için kullanılacak.
  • go test komutu için -fullpath parametresi eklendi. Bu sayede log mesajlarında tam yolun yazdırılma opsiyonu eklendi.

Derleyici

  • Go 1.20 sürümünde önizleme olarak eklenen profile-guide optimization (PGO) 1.21.0 sürümü ile birlikte genel kullanıma hazır hale getirildi. Bununla birlikte temsili bir Go programında PGO etkinleştirilirse %2 ile %7 arasında iyileşme görülebileceği belirtiliyor. PGO hakkında daha detaylı bilgi için bağlantıdan dokümanlara ulaşabilirsiniz.
  • Ayrıca Go 1.21.0 sürümü ile derleyicinin kendisini PGO ile oluşturması sayesinde build alma hızının %6’ya kadar arttığı belirtiliyor.

Yeni Kütüphane Paketleri

log/slog Paketi

Yeni paketin popüler log analiz araçları ve servisler ile entegre desteği olmasıyla beraber Go’da loglama işlemleri için kullanılan 3. parti kütüphanelerin kullanımı azalacak gibi görünüyor. Yapısal loglama (structured logging) anahtar/değer çiftleri ile gerçekleştirildiğinden dolayı büyük miktardaki log kayıtlarının hızlı ve doğru bir şekilde işlenmesi sağlanıyor.

Paket için ufak bir örnek yapacak olursak aşağıdaki kullanılan Info fonksiyonunun imzası slog.Info(msg string, args …any) şeklindedir. Görüldüğü üzere ilk parametre log mesajıdır. diğer parametreler ise anahtar-değer çiftlerini temsil eder.

Ayrıca çıktı formatında daha çok hakimiyet için slog.New(h handler) *Logger imzalı bir fonksiyon da bulunuyor. Bu fonksiyon ile ihtiyaç duyulan handler belirtilerek logger örneği oluşturulabiliyor. Örneğin alttaki örnekte JSONHandler kullanarak bir logger örneği bulunuyor.

Örnekler ve slog paketi hakkında detaylı bilgi için dokümanları inceleyebilirsiniz.

testing/slogtest Paketi

Bu paketin slog.Handler implementasyonlarını doğrulamaya yardımcı olabilmesi amacıyla eklendiği belirtiliyor. Paketin içerisinde func TestHandler(h slog.Handler, results func() []map[string]any) error imzasına sahip bir fonksiyon bulunuyor. Bu fonksiyon kullanıldığı takdirde yanlış giden bir durum olduğunda oluşan hataların her birini error.Join ile birleştirerek döndürülür.

Yalnızca TestHandler fonksiyonu bulunan bu paket için detayları ve örnekleri incelemek isterseniz paket dokümanlarını inceleyebilirsiniz.

slices Paketi

Adından da anlaşılacağı üzere yeni slices paketi slice yapısı için birçok yeni fonksiyon içermektedir. Bu fonksiyonlardan başlıcalarından birkaç tane örnek vereceğim.

slices paketindeki diğer örnekleri, fonksiyonları ve detayları incelemek için lütfen dokümanları inceleyin.

maps Paketi

Bu paket de adından anlaşılacağı üzere map yapısı üzerinde birtakım operasyonlar olan Clone, Copy, DeleteFunc, Equal ve EqualFunc fonksiyonlarını içerir. Birkaç kullanım örneği vermek gerekirse:

cmp Paketi

Bu paket Ordered (sıralı) değerler arasında karşılaştırma yapılabilmesini sağlayan Ordered type’ı ile Compare, Less fonksiyonlarını içerir. Dokümanlara göre Ordered type’ı <, <=, >= ve > operatörlerini destekleyen tipleri içeren türdür.

Compare fonksiyonu ilk parametre ikinciden azsa -1, eşitse 0 ve fazlaysa 1 değerlerini döndürür.

Less fonksiyonu ilk parametre ikinci parametreden azsa true değerini döndürür.

Birer örnek vermek gerekirse:

Web Assembly

Ayrıca Go 1.21.0 sürümü ile WebAssembly ortamında Go dilini daha işlevsel ve esnek kullanmak için ilk adımlar atıldı. Dokümana göre özellikle asenkron olaylarda sık sık bloke olan uygulamalarda etkileşim daha verimli hale gelerek WebAssembly ortamında çalışan uygulamalar için performans artabilir.

Eklenen deneysel port ile (GOOS=wasip1, GOARCH=wasm) WebAssembly ortamında WASI (WebAssembly System Interface) kullanılabilir.

Leave a Reply

Your email address will not be published. Required fields are marked *