Go, C sözdiziminden ilham alan statik yazımlı, eşzamanlı, derlenmiş bir programlama dilidir.
Go'nun yeni sürümü 1.22, 1.21 sürümünden altı ay sonra, araç seti, çalışma zamanı, optimizasyon iyileştirmeleri, derleyici geliştirmeleri ve kütüphanelerde bir dizi önemli değişiklikle birlikte geliyor.
Go'yu bilmeyenler için belirtmeliyim ki, Go, Google tarafından topluluk katılımıyla geliştirilen, derlenmiş dillerin yüksek performansını, kod yazma kolaylığı, geliştirme hızı ve hata koruması gibi betik dillerinin avantajlarıyla birleştiren hibrit bir çözüm olan bir programlama dilidir.
Go 1.22'ün başlıca yeni özellikleri
Go 1.22'den itibaren sunulan bu yeni sürümde, "for" döngülerinde iki önemli değişiklik göze çarpıyor . Daha önce, "for" döngüsüyle tanımlanan değişkenler bir kez oluşturuluyor ve her yinelemede güncelleniyordu. Go 1.22'de, kazara paylaşım hatalarını önlemek için döngünün her yinelemesi yeni değişkenler oluşturuyor . Ayrıca, "for" döngülerinde aralık fonksiyonları için deneysel destek (GOEXPERIMENT=rangefunc) eklendi ve bir fonksiyonun yineleyici olarak belirtilmesine olanak sağlandı. Ayrıca, eş zamanlı işlem çağrılarının döngü değişkenlerini yinelemeler arasında paylaşmasına neden olan "for" döngüleriyle ilgili uzun süredir devam eden bir sorun da çözüldü . Dahası, "for" döngüleri artık tamsayılar üzerinde yineleme yapabiliyor. Örneğin:
package main import "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 kalkıyor!") }
Bu yeni sürümdeki bir diğer önemli değişiklik ise , çalışma alanı bağımlılıklarını içeren bir " vendor " dizinini kullanma özelliğinin getirilmesidir . Komutlar artık bu dizini kullanabilir; bu dizin ` go work vendor` komutuyla oluşturulur ve ` -mod` parametresi " vendor " olarak ayarlandığında derleme komutlarında kullanılır ( çalışma alanında bir " vendor " dizini mevcut olduğunda varsayılan değer budur) .
Şunu belirtmekte fayda var ki, eski GOPATH modunda ` go get` işlevi artık bir modül dışında desteklenmiyor . Ancak, `go build` ve `go test` gibi diğer derleme komutları, eski GOPATH programları için süresiz olarak çalışmaya devam edecektir. Ayrıca, `go mod init` komutu artık diğer satıcı araçlarının (örneğin Gopkg.lock) yapılandırma dosyalarından modül gereksinimlerini içe aktarmaya çalışmayacaktır .
Go 1.22, işaretçiler ve güvenli olmayan bellek ile çalışma işlevselliği sağlayan yeni bir io/unsafe paketini sunuyor . Bu paket, işaretçileri güvenli türlerden güvenli olmayan türlere dönüştürmenin yanı sıra, sınırları kontrol etmeden bellek kopyalama işlemleri gerçekleştirme yöntemleri de sunuyor.
PGO kod profilleme sonuçlarına dayalı derleyici optimizasyonlarını entegre etme çalışmaları devam etti . Derleyici artık çeşitli yöntemlerden gelen dolaylı çağrıları genişletilmiş satır içi blokların yürütülmesiyle değiştirmek için sanallaştırma araçlarını kullanıyor . PGO etkinleştirildiğinde, bu değişiklik çoğu programın performansını %2 ile %14 arasında iyileştirdi.
Go'nun Windows sürümünde, -buildmode=c-archive veya -buildmode=c-shared ile oluşturulmuş Go kütüphanelerine bağlantı veren veya bunları yükleyen programlar, artık Go olay izleme toplama protokolünü bir ETW sağlayıcısı olarak uygulayan yeni runtime/trace ve tracehook paketleri aracılığıyla Windows Olay Günlüğü (ETW) API'sini kullanabilir.
Öne çıkan diğer değişikliklerden:
- Komut teste git - kapak artık kendi test dosyaları olmayan kapsam dahilindeki paketler için kapsam özetlerini yazdırıyor.
- işletim sistemi/yürütme, yürütülen komutlar için çalışma dizini, ortam değişkenleri ve giriş/çıkış dosyası tanımlayıcısı gibi değerleri ayarlamanıza olanak tanıyan bağlam niteliklerini tanımlama yeteneği eklendi.
- Çalışma zamanında optimize edilmiş bellek yönetimi, çoğu uygulamada %1-3 performans artışı ve bellek tüketiminde %1 azalma sağladı.
- El paquete ağ/http, fonksiyon eklendi Boşta Bağlantıları Kapat istemcinin yakın zamanda kullandığı tüm boş bağlantıları kapatan HTTP istemcisine
- Derleyiciye, önemli işlemleri önemsiz olanlardan ayırmak için buluşsal yöntemler kullanan, çağrı ekleme mekanizmasının geliştirilmiş bir deneysel uygulaması (GOEXPERIMENT=newinliner) eklenmiştir.
- Paket eklendi » matematik/rand/v2 » daha tutarlı bir API sunan ve sahte rastgele sayılar oluşturmak için daha hızlı algoritmalar kullanan standart kitaplığa.
- El paquete net/http.ServeMux Şablonlara yöntem ve maskeleri belirtme yeteneği eklendi.
Son olarak, daha fazla bilgi edinmek isterseniz , ayrıntıları aşağıdaki bağlantıda bulabilirsiniz .