1.24'e git

1.24'e git

Go dilinin yeni sürümü olan 1.24 sürümü altı ay sonra geliyor 1.23'e git. Değişikliklerin çoğu araç zinciri, çalışma zamanı ve kütüphanelerin uygulanmasındadır. Her zamanki gibi, sürüm şunları sağlar: uyumluluk vaadi Go 1. Dil tasarımcıları, hemen hemen tüm Go programlarının daha önce olduğu gibi derlenmeye ve çalıştırılmaya devam edeceğini öngörüyor.

Dildeki değişiklikler

Go 1.24 artık tam olarak destekliyor genel tür takma adları: bir tür takma adı, tanımlanmış bir tür olarak parametrelendirilebilir. Ayrıntılar dil özellikleri. Şimdilik bu özellik GOEXPERIMENT=noaliastypeparams; ayarıyla devre dışı bırakılabilir. Ancak aliastypeparams seçeneği Go 1.25'te kaldırılacak.

Araçlar

Git komutu

Go modülleri artık go.mod'daki araç yönergesini kullanarak yürütülebilir bağımlılıkları izleyebilir. Bu, araçları genellikle "tools.go" adı verilen bir dosyaya boş içe aktarmalar olarak ekleme geçici çözümüne olan ihtiyacı ortadan kaldırır. Go aracı komutu artık Go ile birlikte gelen araçlara ek olarak bu araçları da çalıştırabilir. Daha fazla bilgi için şu adresi ziyaret edebilirsiniz: belgeleme.

Go get için yeni -tool bayrağı, belirtilen paketler için require yönergelerinin eklenmesine ek olarak araç yönergelerinin de geçerli modüle eklenmesine neden olur.

Yeni meta-desen aracı geçerli modüldeki tüm araçları ifade eder. Bunları go get aracıyla güncellemek veya go install aracıyla GOBIN dizininize yüklemek için kullanabilirsiniz.

Go run ve yeni go aracı davranışıyla oluşturulan yürütülebilir dosyalar artık Go derleme önbelleğinde önbelleğe alınıyor. Arttırılmış önbellek sayesinde tekrarlanan fırlatmalar mümkün hale geliyor. #69290.

Go build ve go install komutları artık, derleme çıktısını ve hataları standart çıktıda yapılandırılmış JSON çıktısı olarak bildiren -json bayrağını kabul ediyor. Format detaylarını go help buildjson'da görebilirsiniz.

Ayrıca, go test -json artık çıktıyı ve derleme hatalarını test sonucu JSON'uyla karışık olarak JSON biçiminde bildiriyor. Bunlar yeni Eylem türleriyle ayırt edilebilir, ancak test entegrasyon sisteminde sorunlara neden olurlarsa, derlemenin metin çıktısına geri dönebilirsiniz. GODEBUG kurulumu gotestjsonbuildtext=1.

Yeni GOAUTH ortam değişkeni, özel modül çekimlerini yetkilendirmek için esnek bir yol sağlar. Detayları go help goauth'da görebilirsiniz.

Go build komutu artık yüklendi ana modülün sürümü Derlenmiş ikili dosyada, bir etikete ve/veya bir sürüm kontrol onayına dayanarak. Taahhüt edilmemiş değişiklikler varsa +dirty eki eklenecektir. -buildvcs=false bayrağı, ikili dosyadan sürüm kontrol bilgilerini çıkarmak için kullanılabilir.

Yeni GODEBUG kurulumu araç zinciri izi=1 Artık go komutunda araç zinciri seçme sürecini izlemek için kullanılabilir.

Cgo

Cgo, çalışma zamanı performansını iyileştirmek amacıyla C fonksiyonları için yeni açıklamaları destekler. #cgo noescape cFunctionName, derleyiciye C fonksiyonu cFunctionName'e geçirilen belleğin kaçırılmadığını söyler. #cgo nocallback cFunctionName, derleyiciye C fonksiyonu cFunctionName'in hiçbir Go fonksiyonunu geri çağırmadığını söyler. Daha fazla bilgi için şu adresi ziyaret edebilirsiniz: cgo belgeleri.

Cgo şu anda birden fazla uyumsuz bildirimi olan bir C fonksiyonuna yapılan çağrıları derlemeyi reddediyor. Örneğin, f hem void f(int) hem de void f(double) olarak bildirilirse, cgo geçersiz bir çağrı dizisi f(0) üretmek yerine bir hata bildirecektir. Bu sürümdeki yenilik, uyumsuz bildirimler farklı dosyalarda göründüğünde bu hata durumunun daha iyi algılanmasıdır. #67699.

Objdump

Objdump aracı artık 64-bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) ve S390X'te (GOARCH=s390x) sökmeyi destekliyor.

Yağ

Yeni test analizörü, test takımlarındaki test, bulanıklaştırıcı, kıyaslama ve örnek bildirimlerindeki yaygın hataları, örneğin hatalı biçimlendirilmiş adlar, geçersiz imzalar veya var olmayan tanımlayıcıları belgelendiren örnekleri rapor eder. Bu hatalardan bazıları testlerin başarısız olmasına yol açabilir.

Mevcut printf ayrıştırıcısı artık fmt.Printf(s) biçimindeki çağrılar için tanılama raporları sunar; burada s, başka argümanı olmayan sabit olmayan bir biçim dizesidir. Bu tür çağrılar neredeyse her zaman bir hatadır, çünkü s değeri % karakterini içerebilir; Bunun yerine fmt.Print kullanın. 60529. Bu kontrol, mevcut koddaki şeyleri bulma eğilimindedir ve bu nedenle yalnızca dil sürümü (go.mod dosyasının go yönergesinde veya `//go:build` yorumlarında belirtildiği gibi) en azından Go 1.24 olduğunda uygulanır; böylece Go 1.24 araç zincirine yükseltme sırasında uzun entegrasyon kesintilerine neden olunmaz.

Mevcut buildtag analizörü artık yanlış bir buildtag olduğunda tanılama bildiriyor eski sürüm yapı sınırlaması //go:build yönergesine girin. Örneğin, //go:build go1.23.1 bir nokta sürümünü ifade eder; Bunun yerine //go:build go1.23 kullanın. #64127.

Mevcut copylock analizörü artık bir değişken üçlü "for" döngüsünde (örneğin for i := iter();) bildirildiğinde bir tanılama bildiriyor. yapıldı(i); i = next(i) { … }, sync.Mutex gibi sync.Locker'ı içerir. 1.22'e git bu tür döngülerin davranışını, her yinelemede yeni bir değişken oluşturmak, değerleri bir önceki yinelemeden kopyalamak üzere değiştirdi; Bu kopyalama kilitler için güvenli değildir. #66387.

GOCACHEPROG

Dahili cmd/go ikili dosyası ve test önbelleğe alma mekanizması artık cmd/go aracı ile GOCACHEPROG ortam değişkeni ile adlandırılan alt işlem arasında bir JSON protokolü uygulayan alt işlemler tarafından uygulanabilir. Daha önce GOEXPERIMENT içindi. Protokolün detaylarına şu adresten ulaşılabilir: belgeleme.

Tamamlanma zamanı

Birkaç çalışma zamanı performans iyileştirmesi, temsili bir dizi kıyaslamada CPU yükünü ortalama %2-3 oranında azalttı. Sonuçlar uygulamaya göre değişiklik gösterebilir. Bu iyileştirmeler arasında, yerleşik yeni bir harita uygulaması da yer alıyor İsveç Tabloları, küçük nesne belleğinin daha verimli tahsisi ve mutex'in yeni bir dahili çalışma zamanı uygulaması.

Yeni yerleşik harita uygulaması ve yeni dahili çalışma zamanı karşılıklı dışlama, derleme zamanında sırasıyla GOEXPERIMENT=noswissmap ve GOEXPERIMENT=nospinbitmutex ayarlanarak devre dışı bırakılabilir.

Derleyici

Derleyici, cgo tarafından üretilen alıcı türleriyle yeni metotlar tanımlamayı zaten yasaklamıştı, ancak bir tür takma adı aracılığıyla bu kısıtlamayı aşmak mümkündü. Go 1.24 artık alıcının doğrudan veya dolaylı olarak (bir tür takma adı aracılığıyla) cgo tarafından üretilen bir türü belirtmesi durumunda her zaman bir hata bildiriyor.

Bağlayıcı

Bağlayıcı artık varsayılan olarak ELF platformlarında bir GNU yapı tanımlayıcısı (ELF girişi NT_GNU_BUILD_ID) ve macOS'ta bir UUID (Mach-O yükleme komutu LC_UUID) üretiyor. Derleme kimliği veya UUID, Go derleme kimliğinden türetilir. Bu, -B none bağlayıcı bayrağı ile kapatılabilir veya kullanıcı tarafından belirtilen onaltılık bir değere sahip -B 0xNNNN bağlayıcı bayrağı ile geçersiz kılınabilir.

Terfi

Belirtildiği gibi Go 1.22 sürüm notları, Go 1.24 artık Go 1.22.6 veya daha üstünün kurulu olmasını gerektiriyor. Geliştiriciler, Go 1.26'nın dağıtılabilmesi için Go 1.24 veya daha sonraki bir sürümünün yayınlanmasının gerekeceğini öngörüyor.

Standart Kütüphane

Dizinle sınırlı dosya sistemi erişimi

Yeni tip os.root Belirli bir dizinde dosya sistemi işlemlerini gerçekleştirme yeteneği sağlar.

Fonksiyon os.AçıkKök dizini açar ve geri döner os.root. Yöntemler os.root bu dizinde işlem yapın ve dizin dışındaki konumlara, dizin dışındaki sembolik bağlantıları izleyenler de dahil olmak üzere, yolların başvurmasına izin vermeyin. os.Root üzerindeki yöntemler, örneğin, os paketinde bulunan dosya sistemi işlemlerinin çoğunu yansıtır: os.Root.Açık, os.Root.Oluştur, os.Root.Mkdir и os.Kök.İstatistik.

Yeni kıyaslama özelliği

Karşılaştırmalar artık daha hızlı, daha az hata içeren bir yöntem kullanabilir test.B.Döngü bN aralığı için bN'yi içeren tipik döngü yapıları yerine b.Loop() { … } için olduğu gibi bir kıyaslama ölçütü üzerinde yineleme yapmak için Bu, iki önemli avantaj sunar:

  • Karşılaştırma fonksiyonu her sayım için tam olarak bir kez yürütülür, dolayısıyla pahalı kurulum ve temizleme adımları yalnızca bir kez gerçekleştirilir.
  • Fonksiyon çağrı parametreleri ve sonuçları yaşamaya devam eder ve derleyicinin döngü gövdesini tamamen optimize etmesini engeller.

Geliştirilmiş finalizatörler

Yeni özellik çalışma zamanı.AddCleanup daha esnek, daha verimli ve daha az hata içeren bir tamamlama mekanizmasıdır çalışma zamanı.SetFinalizer. AddCleanup, nesne kullanılamaz hale geldiğinde çalıştırılacak bir temizleme işlevini nesneye ekler. Ancak SetFinalizer'dan farklı olarak, birden fazla temizleme tek bir nesneye eklenebilir, temizlemeler dahili işaretçilere eklenebilir, temizlemeler nesneler bir döngü oluşturduğunda genellikle sızıntılara neden olmaz ve temizlemeler işaret ettiği nesnenin veya nesnelerin tahsisinin kaldırılmasını geciktirmez. Yeni kod SetFinalizer yerine AddCleanup'ı tercih etmelidir.

Yeni zayıf paket

Yeni paket zayıf zayıf noktalara işaret ediyor.

Zayıf işaretçiler, değerleri eşlemek için zayıf sözlükler, bir paket tarafından kapsanmayan herhangi bir şey için kanonikleştirme sözlükleri gibi hafıza açısından verimli yapılar oluşturmak için sağlanan düşük seviyeli bir ilkeldir. benzersizve çeşitli tipte önbellekler. Bu kullanım durumlarını desteklemek için bu sürüm ayrıca şunları da sağlar: çalışma zamanı.AddCleanup и maphash.Karşılaştırılabilir.

Yeni crypto/mlkem paketi

Yeni paket kripto/mlkem ML-KEM-768 ve ML-KEM-1024'ü uygular.

ML-KEM, daha önce Kyber olarak bilinen ve kuantum sonrası bir anahtar değişim mekanizmasıdır. FIPS203.

Yeni paketler crypto/hkdf, crypto/pbkdf2 ve crypto/sha3

Yeni paket kripto/hkdf HMAC tabanlı “Çıkart ve Genişlet” anahtar türetme işlevi HKDF'yi tanımlandığı gibi uygular RFC 5869.

Yeni paket kripto/pbkdf2 şifre tabanlı anahtar türetme işlevi PBKDF2'yi tanımlandığı gibi uygular RFC 8018.

Yeni paket kripto/sha3 SHA-3 karma işlevini ve SHAKE ve cSHAKE genişletilebilir çıktı işlevlerini tanımlandığı şekilde uygular FIPS202.

Her üç paket de mevcut golang.org/x/crypto/… paketlerine dayanmaktadır.

FIPS 140-3 Uyumluluğu

Bu sürüm şunları içerir: FIPS 140-3 uyumluluğunu sağlamak için yeni bir mekanizma seti.

Go kripto modülü, FIPS 140-3 onaylı algoritmaları şeffaf bir şekilde uygulamak için kullanılan bir dizi dahili standart kütüphane paketidir. Onaylı algoritmalar için Go kripto modülünü kullanmak için uygulamaların değişiklik yapmasına gerek yoktur.

Yeni ortam değişkeni GOFIPS140, bir derlemede kullanılacak Go kripto modülünün sürümünü seçmek için kullanılabilir. Yeni GODEBUG kurulumu fips140, çalışma zamanında FIPS 140-3 modunu etkinleştirmek için kullanılabilir.

Go 1.24, şu anda CMVP akrediteli bir laboratuvarda test edilen Go kripto modülü v1.0.0'ı içeriyor.

Yeni deneysel paket testi/synctest

Yeni deneysel paket test etme/eşzamanlama testi Eş zamanlı kod test etme desteği sağlar.

Ayrıntıları paket dokümantasyonunda bulabilirsiniz.

Synctest paketi deneyseldir ve GOEXPERIMENT=synctest ayarlanarak etkinleştirilmelidir. Paket API'si gelecekteki sürümlerde değişebilir. İÇİNDE #67434 Daha fazla detay görebilir ve geri bildirimde bulunabilirsiniz.

Kütüphanede küçük değişiklikler

arşiv

archive/zip ve archive/tar'daki (*Writer.AddFS) uygulamaları artık boş bir dizin için dizin başlığını yazıyor.

bayt

Paket bayt yineleyicilerle çalışan birkaç fonksiyon ekler:

  • Hatlar Bayt dilimindeki yeni satırla ayrılmış dizeler üzerinde bir yineleyici döndürür.
  • Bölünmüş Sıra Bir bayt diliminin ayırıcıyla ayrılmış tüm alt dilimleri üzerinde bir yineleyici döndürür.
  • BölünmüşSonraSıralı bir bayt diliminin alt dilimleri üzerinde, ayırıcının her oluşumundan sonra bölünen bir yineleyici döndürür.
  • AlanlarSırası tanımlandığı gibi, boşluk karakterlerinin dizileri etrafındaki bir bayt diliminin alt dilimleri üzerinde bir yineleyici döndürür unicode.Uzay
  • AlanlarFuncSeq Bir yordamı tatmin eden Unicode kod noktalarının dizileri etrafındaki bir bayt diliminin alt dilimleri üzerinde bir yineleyici döndürür.

kripto/aes

Dönüş değeri YeniŞifre artık NewCTR, NewGCM, NewCBCEncrypter ve NewCBCDecrypter yöntemlerini uygulamıyor. Bu yöntemler belgelenmemiş olup tüm mimarilerde mevcut değildir. Şimdi anlamı Engellemek doğrudan uygun işlevlere iletilmelidir kripto/şifre. Şu anda, crypto/cipher bu yöntemleri Blok değerleri üzerinde kontrol etmeye devam ediyor, ancak artık standart kütüphane tarafından desteklenmiyorlar.

kripto/şifre

Yeni özellik YeniGCMWithRandomNonce döner AEADSeal sırasında rastgele bir nonce üreterek ve bunu şifreli metne ekleyerek AES-GCM'yi uygulayan.

uygulama dere, geri döndü YeniCTR ile kullanıldığında kripto/aes artık amd64 ve arm64'te birkaç kat daha hızlı.

YeniOFB, YeniCFBEncrypter и YeniCFBDifre çözücü artık geçersiz ilan edildi. OFB ve CFB modları kimlik doğrulaması yapılmadığından, genellikle aktif saldırıların düz metni manipüle etmesine ve ele geçirmesine olanak tanır. Uygulamaların kullanılması önerilir AEAD karşılığında. Eğer kimliği doğrulanmamış mod dere gerekli, kullanılabilir YeniCTR karşılığında.

kripto/ecdsa

ÖzelAnahtar.İmza şimdi buna göre kesin bir imza oluşturur RFC 6979, eğer rastgelelik kaynağı sıfır ise.

kripto/md5

Dönüş değeri md5.yeni, artık arayüzü de uyguluyor kodlama.ikiliekleyici.

kripto/rand

Fonksiyon Okumak artık hiçbir arızanın olmayacağını garanti ediyor. Eğer Read okuma sırasında bir hatayla karşılaşırsa Okuyucu, program kalıcı olarak sonlanacaktır. Varsayılan Reader'ın her zaman başarılı bir şekilde çalışacak şekilde belgelendiğini unutmayın, bu nedenle bu değişiklik yalnızca Reader değişkenini geçersiz kılan programları etkilemelidir. Bir istisna, varsayılan Okuyucunun hala /dev/urandom'ı açtığı ve başarısız olabileceği 3.17 öncesi Linux çekirdekleridir.

Linux 6.11 ve sonrasında Reader artık vDSO aracılığıyla getrandom sistem çağrısını kullanıyor. Bu, genellikle küçük okumalar için birkaç kat daha hızlıdır.

OpenBSD Reader'da artık arc4random_buf(3) kullanılıyor.

Yeni özellik Metin artık kriptografik olarak güvenli rastgele metin dizeleri üretebilir.

kripto/rsa

Anahtar Oluştur Artık 1024 bit'ten daha az bir anahtar uzunluğu talep edildiğinde bir hata döndürülüyor. Tüm İmzala, Doğrula, Şifrele ve Şifre Çöz yöntemleri artık 1024 bitten daha küçük bir anahtar boyutuyla kullanıldığında hata döndürüyor. Bu tür anahtarlar güvenli değildir ve kullanılmamalıdır. GODEBUG'ı kurma rsa1024min=0 eski davranışı geri yükler, ancak Go geliştiricileri bunu yalnızca gerekli olduğunda ve yalnızca testlerde yapmanızı, örneğin test dosyasına //go:debug rsa1024min=0 satırını eklemenizi öneriyor. Yeni örnek GenerateKey kullanımı kolay standart 2024 bitlik bir test anahtarı sağlar.

Artık arama yapmak daha güvenli ve daha verimli PrivateKey.Ön hesaplama karşı ÖzelAnahtar.Doğrula. Kısmen dolu olduğunda ön hesaplama artık daha hızlı Önceden Hesaplanmış DeğerlerÖrneğin JSON'dan bir anahtar çıkarırken.

Paket artık Validate çağrılmasa bile daha fazla geçersiz anahtarı reddediyor ve Anahtar Oluştur Artık bozuk rastgelelik kaynakları için yeni hatalar döndürebilir. Alanlar Asal sayılar и Önceden hesaplanmış yapı PrivateKey artık bazı değerler eksik olsa bile kullanılıyor ve doğrulanıyor. Aşağıda açıklanan RSA anahtarlarının ayrıştırılması ve çıkarılması için crypto/x509'da da değişiklikler var.

İmzaPKCS1v15 и PKCS1v15'i doğrulayın artık SHA-512/224, SHA-512/256 ve SHA-3'ü destekliyor.

Anahtar Oluştur artık özel üssü üretmek için biraz farklı bir yöntem kullanıyor (Euler fonksiyonu yerine Carmichael fonksiyonu). Sadece asal sayılardan harici olarak anahtar üreten nadir uygulamalar farklı ancak uyumlu sonuçlar üretebilir.

Wasm ile artık açık ve özel anahtarlar üzerindeki işlemler iki kata kadar daha hızlı.

kripto/sha*

kripto/ince

Yeni özellik VeriBağımsızZamanlama ile Kullanıcının, veri değerinin zamanına göre belirli talimatların değiştirilmemesini sağlayan mimariye özgü özellikleri etkinleştirerek bir işlevi yürütmesine olanak tanır. Bu, sabit zamanda çalışmak üzere yazılan kodun, işlemci düzeyindeki işlevler tarafından değişken zamanda çalışacak şekilde optimize edilmediğinden emin olmak için kullanılabilir. Şu anda WithDataIndependentTiming arm64 üzerinde PSTATE.DIT bitini kullanıyor ve diğer tüm mimarilerde hiçbir şey yapmıyor. GODEBUG'ı kurma dataindependenttiming=1, tüm Go programı için DIT modunu etkinleştirir.

Aviator apk XORbaytları Girişle tamamen örtüşmeli veya hiç örtüşmemelidir. Daha önce davranış başka türlü tanımlanmazken, şimdi XORBytes panikleyecek.

kripto/tl

TLS sunucusu artık Şifreli İstemci Hello'yu (ECH) destekliyor. Bu özellik, alanın doldurulmasıyla aktif hale getirilebilir. Config.EncryptedClientHelloKeys.

Yeni Bir Kuantum Sonrası Anahtar Değişim Mekanizması X25519MLKEM768 artık destekleniyor ve varsayılan olarak etkinleştiriliyor Yapılandırma.EğriTercihleri sıfırdır. GODEBUG'ı kurma tlsmlkem=0 varsayılanı döndürür.

Deneysel X25519Kyber768Draft00 anahtar değişimine yönelik destek kaldırıldı.

Anahtar değişim emri artık tamamen crypto/tls paketi tarafından gerçekleştiriliyor. Emir Yapılandırma.EğriTercihleri artık göz ardı edilir ve içerikler yalnızca alan doldurulduğunda hangi anahtar değişimlerinin dahil edileceğini belirlemek için kullanılır.

Yeni alan İstemciHelloInfo.Uzantılar İstemci Merhaba mesajında ​​alınan uzantı tanımlayıcılarının listesini listeler. Bu, TLS istemcilerinin parmak izini almak için yararlı olabilir.

kripto/x509

GODEBUG'ı kurma x509sha1 kaldırıldı. Sertifikasyon.Doğrula artık SHA-1 tabanlı imzaları desteklemiyor.

OSB artık arayüzleri uyguluyor kodlama.ikiliekleyici и kodlama.TextAppender.

Varsayılan sertifika ilkesi alanı şu şekilde değiştirildi: Sertifika.PolitikaTanımlayıcıları üzerinde Sertifika.Politikalar. Sertifikalar ayrıştırılırken her iki alan da doldurulacaktır, ancak bir sertifika politikası oluşturulurken bunlar Certificate.PolicyIdentifiers alanı yerine Certificate.Policies alanından alınacaktır. Bu değişiklik geri alınabilir. GODEBUG kurulumu x509usepolicies=0.

Sertifika Oluştur artık bir şablon alanı geçirilirken RFC 5280 uyumlu bir yöntem kullanılarak bir seri numarası üretilecek Sertifika.Seri Numarası sıfır, çökme yerine.

Sertifika.Doğrula artık RFC 5280 ve RFC 9618'de tanımlandığı gibi politika doğrulamasını destekliyor. Yeni alan VerifyOptions.Sertifikaİlkeleri kabul edilebilir bir politika kümesine ayarlanabilir OID'ler. Yalnızca geçerli politika grafiklerine sahip sertifika zincirleri döndürülecektir. Sertifika.Doğrula.

MarshalPKCS8ÖzelAnahtar artık geçersiz bir RSA anahtarı almak yerine bir hata döndürüyor. (MarshalPKCS1ÖzelAnahtar (Hiçbir hata döndürmez ve geçersiz anahtarlar sağlandığında davranışı tanımsız kalır.)

PKCS1ÖzelAnahtarıAyrıştır и PKCS8ÖzelAnahtarıAyrıştır Artık kodlanmış CRT değerlerini kullanabilir ve doğrulayabilir, böylece daha önce kabul edilen geçersiz RSA anahtarlarını reddedebilirsiniz. Kullanım GODEBUG ayarları x509rsacrt=0 CRT değerlerinin yeniden hesaplanmasına döner.

hata ayıklama/elf

Paket hata ayıklama/elf Dinamik ELF (Yürütülebilir ve Bağlanabilir Biçim) dosyalarında sembol sürümlerinin işlenmesine yönelik destek ekler. Yeni yöntem Dosya.DinamikSürümler ELF dosyasında tanımlanan dinamik sürümlerin listesini döndürür. Yeni yöntem Dosya.DinamikSürümİhtiyaçları Bu ELF dosyası tarafından ihtiyaç duyulan ve diğer ELF nesnelerinde tanımlanan dinamik sürümlerin bir listesini döndürür. Sonunda yeni alanlar Sembol.Sürümü Var и Sembol.Sürümİndeksi sembolün versiyonunu belirtiniz.

kodlama

İki yeni arayüz MetinEkleyici и İkiliEkleyici Bir nesnenin metin veya ikili gösterimini bir bayt dilimine eklemek için tanıtıldı. Bu arayüzler, aşağıdakilerle aynı işlevselliği sağlar: MetinMarshaler и İkiliMarşalerAncak her seferinde yeni bir dilim tahsis etmek yerine, verileri doğrudan var olan bir dilime eklerler. Bu arayüzler halihazırda TextMarshaler ve/veya BinaryMarshaler'ı uygulayan standart kütüphane türleri tarafından uygulanmaktadır.

kodlama/json

Derleme sırasında, yapı alanı etiketinde yeni omitzero seçeneği olan bir yapı alanı, değeri sıfırsa atlanacaktır. Alan tipinde bir IsZero() bool metodu varsa, değerin sıfır olup olmadığını belirlemek için bu metot kullanılacaktır. Aksi takdirde değer sıfır olacaktır. türü için boş değer. Boş değerleri atlamak istendiğinde omitzero alan etiketi omitempty'den daha temiz ve daha az hataya açıktır. Özellikle, omitempty'nin aksine, omitzero sıfırları atlar zaman.zaman sorunların ortak kaynağı olan değerlerdir.

Hem omitempty hem de omitzero belirtilirse, değer boş veya sıfırsa (veya her ikisi de) alan atlanır.

UnmarshalTypeError.Alanı Artık daha ayrıntılı hata mesajları sağlamak için yerleşik yapılar içeriyor.

git/türler

Len() int ve At(int) T gibi metot çiftlerinin dizilerini ortaya koyan tüm go/types veri yapıları artık yineleyiciler döndüren metotlara da sahip ve bu da şu şekilde daha basit bir koda izin veriyor:

parametreler := fn.Type.(*types.Signature).Params() i için := 0; ben <params.Len(); i++ { use(params.At(i)) }

Bu konuda:

param için := aralık fn.Signature().Params().Variables() { use(param) }

yöntemleri: Arayüz.GömülüTürler Arayüz.Açık Yöntemler Arayüz.Yöntemler Yöntem Kümesi.Yöntemler Adlandırılmış.Yöntemler Kapsam.Çocuklar Yapı.Alanları Tuple.Değişkenler TürListesi.Türler TürParametreListesi.TürParametreleri Birlik.Şartlar

doğramak/*

günlük/slog

Yeni Atma İşleyicisi hiçbir zaman etkinleştirilmeyen ve çıktısını her zaman atan bir işleyicidir.

Seviye и SeviyeDeğişkeni şimdi arayüzü uygula kodlama.TextAppender.

matematik/*

net

DinleKoşul Artık desteklendiği sistemlerde (şu anda yalnızca Linux) varsayılan olarak MPTCP kullanılıyor.

IP şimdi arayüzü uyguluyor kodlama.TextAppender.

ağ/http

Kısıtlama değişti Transfer Alınan 1xx bilgisine yanıt olarak isteğe yanıt verilir. Daha önce bu, 5'ten fazla 1xx yanıtı alındığında isteği durdurur ve bir hata döndürürdü. Bu artık yalnızca tüm 1xx yanıtlarının toplam boyutu yapılandırma ayarını aşarsa bir hata döndürür Taşıma.MaxResponseHeaderBytes.

Ayrıca, bir istekte izleme kancası olduğunda net/http/httptrace.ClientTrace.Got1xxYanıt, artık toplam cevap sayısında bir sınırlama yok 1xx. Got1xxResponse kancası isteği durdurmak için bir hata döndürebilir.

Transfer и sunucu Artık HTTP/2 protokol ayarlarının yapılandırılmasına izin veren bir HTTP2 alanı var.

Yeni alanlar Sunucu.Protokoller и Taşıma.Protokoller Sunucunun veya istemcinin hangi HTTP protokollerini kullanacağını yapılandırmanın basit bir yolunu sağlar.

Sunucu ve istemci şifrelenmemiş HTTP/2 bağlantılarını destekleyecek şekilde yapılandırılabilir.

Ne zaman Sunucu.Protokoller UnencrypterHTTP2 içeriyorsa, sunucu şifrelenmemiş portlarda HTTP/2 bağlantılarını kabul edecektir. Sunucu aynı port üzerinde hem HTTP/1 hem de şifrelenmemiş HTTP/2'yi kabul edebilir.

Ne zaman Taşıma.Protokoller Şifrelenmemiş HTTP2 içeriyor ve HTTP1 içermiyorsa, taşıma adresler için şifrelenmemiş HTTP/2 kullanacaktır http://. Bir taşıma hem HTTP/1 hem de şifrelenmemiş HTTP/2 kullanacak şekilde yapılandırılmışsa HTTP/1'i kullanacaktır.

Şifrelenmemiş HTTP/2 desteği "İleri Öğrenmeli HTTP/2"yi kullanır (RFC 9113, bölüm 3.3). Kullanımdan kaldırılan “Upgrade: h2c” başlığı desteklenmiyor.

net/netip

Adr, AdresBağlantıNoktası и Önek şimdi arayüzleri uygula kodlama.ikiliekleyici и kodlama.TextAppender.

ağ/url

URL artık arayüzü de uyguluyor kodlama.ikiliekleyici.

işletim sistemi/kullanıcı

Windows'ta akım Artık Windows Nano Server'da kullanılabilir. Nano Server'da bulunmayan NetApi32 kütüphanesindeki fonksiyonların kullanılmaması için uygulama güncellendi.

Windows'ta akım, Arama и Arama Kimliği artık aşağıdaki yerleşik kullanıcı hizmeti hesaplarını destekliyor:

  • NT OTORİTE SİSTEMİ
  • NT YETKİLİSİYEREL HİZMET
  • NT AUTHORITYNETWORK HİZMETİ

Windows'ta akım Mevcut kullanıcı yavaş bir etki alanına bağlandığında, ki bu birçok kurumsal kullanıcı için yaygın bir durumdur, önemli ölçüde hızlandı. Yeni uygulamanın performansı, tamamlanması birkaç saniye, hatta birkaç dakika sürebilen önceki uygulamaya kıyasla artık milisaniyeler mertebesinde.

Windows'ta akım Artık geçerli iş parçacığı başka bir kullanıcıyı taklit ettiğinde işlem sahibi kullanıcıyı döndürür. Daha önce bu bir hata döndürdü.

regexp

normal ifade şimdi arayüzü uyguluyor kodlama.TextAdapter.

runtime

Fonksiyon MUHTEŞEM artık kullanım dışıdır. Daha yeni ortamlarda, "go" ikilisini belirlemek için sistem yolunu kullanmayı ve GOROOT'u belirlemek için go env GOROOT kullanmayı tercih etmelisiniz.

dizeleri

Paket dizeleri yineleyicilerle çalışmak için çeşitli işlevler ekler:

  • Hatlar Bir dizedeki yeni satırlarla ayrılmış satırlar üzerinde bir yineleyici döndürür.
  • Bölünmüş Sıra Bir dizenin ayırıcıyla ayrılmış tüm alt dizeleri üzerinde bir yineleyici döndürür.
  • BölünmüşSonraSıralı Bir dizenin alt dizeleri üzerinde bir yineleyici döndürür, ayırıcının her oluşumundan sonra bölünür.
  • AlanlarSırası tanımlandığı gibi, boşluk karakterlerinin dizileri etrafındaki bir dizenin alt dizeleri üzerinde bir yineleyici döndürürunicode.Uzay
  • AlanlarFuncSeq Bir yordamı karşılayan Unicode kod noktalarının dizileri etrafındaki dizenin alt dizeleri üzerinde bir yineleyici döndürür.

senkronize

uygulama senkronizasyon haritası Özellikle sözlük değişikliklerinde performansı artırmak için değiştirildi. Örneğin, büyük sözlüklerde ayrık küme değişikliği çekişmesi daha az olasıdır ve artık düşük çekişmeli sözlük yükü elde etmek için birikim süresine ihtiyaç duyulmaz.

Herhangi bir sorunla karşılaşırsanız, eski uygulamaya geri dönmek için derleme sırasında GOEXPERIMENT=nosynchashtriemap'i ayarlayın ve lütfen sorun formunu doldurun.

test yapmak

Yeni yöntemler T.Bağlam и B.Bağlam test tamamlandıktan sonra ve test temizleme fonksiyonları yürütülmeden önce atılan bir bağlam döndürür.

Yeni yöntemler T.Chdir и B.Chdir Bir test veya kıyaslama süresince çalışma dizinini değiştirmek için kullanılabilir.

metin/şablon

Şablonlar artık range-over-func ve range-over-int'i destekliyor.

zaman

Zaman artık arayüzleri uyguluyor kodlama.ikiliekleyici и kodlama.TextAppender.

Girişler

Linux

Olduğu gibi объявлено Go 1.23 sürüm notlarına göre Go 1.24, Linux çekirdeğinin 3.2 veya üzeri sürümünü gerektiriyor.

Darwin

Go 1.24, macOS 11 Big Sur'da çalışacak son sürümdür. Go 1.25'i kullanmak için macOS 12 Monterey veya üzeri bir sürüme ihtiyacınız olacak.

WebAssembly

Go programlarına, fonksiyonları WebAssembly ana bilgisayarına aktarmak için go:wasmexport derleyici yönergesi eklendi.

WebAssembly Sistem Arayüzü Önizleme 1'de (GOOS=wasip1 GOARCH=wasm), Go 1.24 bir Go programını şu şekilde oluşturmayı destekler: reaktör/kütüphane -buildmode=c-shared yapı bayrağını belirterek.

Artık go:wasmimport fonksiyonları için argüman veya sonuç türü olarak daha fazla türe izin veriliyor. Özellikle bool, string, uintptr ve belirli tiplere ait işaretçilere izin verilir (ayrıntılar için bkz. belgeleme), 32-bit ve 64-bit tam sayı ve kayan nokta türleri ve zaten izin verilen unsafe.Pointer ile birlikte. Bu tipler go:wasmexport fonksiyonları için argüman veya sonuç tipi olarak da kullanılabilir.

WebAssembly için destek dosyaları misc/wasm'den lib/wasm'ye taşındı.

Özellikle küçük WebAssembly uygulamaları için başlangıçtaki bellek alanı önemli ölçüde azalır.

Windows

32-bit windows/arm portu (GOOS=windows GOARCH=arm) bozuk olarak işaretlendi. Ayrıntılar #70705

Kaynak: linux.org.ru

Yorum ekle