1.24 gedin

1.24 gedin

Go dilinin yeni buraxılışı, 1.24 versiyası altı ay sonra gəlir 1.23 gedin. Dəyişikliklərin əksəriyyəti alətlər zəncirinin, işləmə müddətinin və kitabxanaların tətbiqindədir. Həmişə olduğu kimi, buraxılış təmin edir uyğunluq vədi Go 1. Dil dizaynerləri gözləyirlər ki, demək olar ki, bütün Go proqramları əvvəlki kimi tərtib olunmağa və işləməyə davam edəcək.

Dil dəyişiklikləri

Go 1.24 indi tam dəstəkləyir ümumi tipli ləqəblər: tip ləqəbi elan edilmiş tip kimi parametrləşdirilə bilər. Təfərrüatlar dil spesifikasiyası. Hələlik bu funksiyanı GOEXPERIMENT=noaliastypeparams təyin etməklə söndürmək olar; Bununla belə, aliastypeparams seçimi Go 1.25-də silinəcək.

Tools

Get əmri

Go modulları indi go.mod-da alət direktivindən istifadə edərək icra edilə bilən asılılıqları izləyə bilər. Bu, adətən “tools.go” adlanan fayla boş idxal kimi alətlər əlavə etmək üçün əvvəlki müvəqqəti həll ehtiyacını aradan qaldırır. Go tool əmri indi Go ilə gələn alətlərə əlavə olaraq bu alətləri işlədə bilər. Ətraflı məlumatı buradan əldə etmək olar sənədləşdirmə.

Go get üçün yeni -tool bayrağı tələb direktivlərini əlavə etməklə yanaşı, göstərilən paketlər üçün cari modula alət direktivlərinin əlavə edilməsinə səbəb olur.

Yeni meta-naxış aləti cari moduldakı bütün alətlərə aiddir. Bu, onların hamısını go get aləti ilə yeniləmək və ya get quraşdırma aləti vasitəsilə GOBIN kataloqunuza quraşdırmaq üçün istifadə edilə bilər.

Go run vasitəsilə yaradılmış icraedicilər və yeni get alət davranışı indi Go qurma keşində keşlənir. Bu, artan keş sayəsində təkrar buraxılışları mümkün edir. # 69290.

Go build and go install əmrləri indi -json bayrağını qəbul edir ki, bu da standart çıxışda strukturlaşdırılmış JSON çıxışı kimi qurulma çıxışını və səhvləri bildirir. Format təfərrüatlarını go help buildjson-da görmək olar.

Bundan əlavə, go test -json indi çıxışı bildirir və test nəticəsi JSON ilə qarışdırılmış JSON-da səhvlər qurur. Onları yeni Fəaliyyət növləri ilə fərqləndirmək olar, lakin test inteqrasiya sistemində problemlər yaradarsa, siz aşağıdakı vasitəsilə qurmanın mətn çıxışına qayıda bilərsiniz. GODEBUG quraşdırma gotestjsonbuildtext=1.

Yeni GOAUTH mühit dəyişəni şəxsi modulların çəkilməsinə icazə vermək üçün çevik bir yol təqdim edir. Təfərrüatları go help goauth bölməsində görə bilərsiniz.

Go build əmri indi quraşdırılıb əsas modulun versiyası Təq və/yaxud versiyaya nəzarət öhdəliyinə əsaslanan tərtib edilmiş binar sistemdə. Təhlükəsiz dəyişikliklər olduqda +kirli şəkilçisi əlavə olunacaq. -buildvcs=false bayrağı ikili sistemdən versiyaya nəzarət məlumatını buraxmaq üçün istifadə edilə bilər.

Yeni GODEBUG quraşdırma toolchaintrace=1 indi go əmrində alətlər silsiləsi seçimi prosesini izləmək üçün istifadə edilə bilər.

Cgo

Cgo iş vaxtının performansını yaxşılaşdırmaq üçün C funksiyaları üçün yeni annotasiyaları dəstəkləyir. #cgo noescape cFunctionName kompilyatora C funksiyasına ötürülən yaddaşın cFunctionName-dən qaçmadığını bildirir. #cgo nocallback cFunctionName kompilyatora deyir ki, C funksiyası cFunctionName heç bir Go funksiyasını geri çağırmır. Ətraflı məlumatı buradan əldə etmək olar cgo sənədləri.

Cgo hazırda bir çox uyğunsuz bəyannaməyə malik olan C funksiyasına zəngləri tərtib etməkdən imtina edir. Məsələn, əgər f həm etibarsız f(int), həm də void f(double) kimi elan edilərsə, cgo yanlış çağırış ardıcıllığı f(0) yaratmaq əvəzinə xəta haqqında məlumat verəcəkdir. Bu buraxılışda yenilik, müxtəlif fayllarda uyğun olmayan bəyannamələrin göründüyü zaman bu xətanın təkmilləşdirilmiş aşkarlanmasıdır. # 67699.

Objdump

Objdump aləti indi 64-bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) və S390X (GOARCH=s390x)-da sökülməni dəstəkləyir.

Yağ

Yeni test analizatoru test paketlərindəki test, fuzzer, etalon və nümunə bəyannamələrində ümumi səhvlər, məsələn, səhv formalaşdırılmış adlar, etibarsız imzalar və ya mövcud olmayan identifikatorları sənədləşdirən nümunələr haqqında məlumat verir. Bu səhvlərdən bəziləri testlərin uğursuz olmasına səbəb ola bilər.

Mövcud printf analizatoru indi fmt.Printf(s) formasının zəngləri üçün diaqnostika haqqında hesabat verir, burada s başqa heç bir arqumenti olmayan qeyri-sabit format sətridir. Belə zənglər demək olar ki, həmişə xətadır, çünki s dəyəri % simvolunu ehtiva edə bilər; əvəzinə fmt.Print istifadə edin. 60529. Bu yoxlama mövcud kodda əşyalar tapmağa meyllidir və buna görə də yalnız dil versiyası (go.mod faylının go direktivində və ya `//go:build` şərhlərində göstərildiyi kimi) ən azı Go 1.24 olduqda tətbiq edilir ki, Go 1.24 alətlər zəncirinə təkmilləşdirilərkən uzun inteqrasiya fasilələrinə yol verməmək üçün.

Mövcud quruluş etiketi analizatoru indi səhv quruluş etiketi olduqda diaqnostika barədə məlumat verir köhnə versiyanın qurulması məhdudiyyəti //go:build direktivinə keçin. Məsələn, //go:build go1.23.1 nöqtə buraxılışına aiddir; əvəzinə //go:build go1.23 istifadə edin. # 64127.

Mövcud copylock analizatoru indi dəyişən üçlü “for” dövrəsində elan edildikdə diaqnostika barədə məlumat verir, məsələn for i := iter(); tamamlandı (i); i = next(i) { … }, sync.Mutex kimi sinxronizasiya.Locker-i ehtiva edir. 1.22 gedin əvvəlki iterasiyadan dəyərləri kopyalayaraq hər bir iterasiya üçün yeni dəyişən yaratmaq üçün bu cür döngələrin davranışını dəyişdirdi; Bu kopyalama kilidlər üçün təhlükəsiz deyil. # 66387.

GOCACHEPROG

Daxili cmd/go binar və test keşləmə mexanizmi indi cmd/go aləti ilə GOCACHEPROG mühit dəyişəni tərəfindən adlandırılan uşaq prosesi arasında JSON protokolunu həyata keçirən uşaq proseslər tərəfindən həyata keçirilə bilər. Əvvəllər GOEXPERIMENT üçün idi. Protokolun təfərrüatları ilə tanış ola bilərsiniz sənədləşdirmə.

Tamamlanma vaxtı

Bir neçə iş vaxtı performans təkmilləşdirmələri bir sıra təmsilçi meyarlar üzrə CPU-nun yükünü orta hesabla 2-3% azaldıb. Nəticələr tətbiqdən asılı olaraq dəyişə bilər. Bu təkmilləşdirmələrə əsaslanan yeni daxili xəritə tətbiqi daxildir İsveç masaları, kiçik obyekt yaddaşının daha səmərəli ayrılması və mutexin yeni daxili icra müddəti.

Quraşdırma zamanı müvafiq olaraq GOEXPERIMENT=noswissmap və GOEXPERIMENT=nospinbitmutex təyin etməklə yeni quraşdırılmış xəritə tətbiqi və yeni daxili işləmə vaxtı mutexi deaktiv edilə bilər.

Kompilyator

Kompilyator artıq cgo tərəfindən yaradılan qəbuledici tipləri ilə yeni metodların müəyyən edilməsini qadağan etmişdi, lakin bu məhdudiyyəti bir növ ləqəb vasitəsilə həll etmək mümkün idi. Go 1.24 indi qəbuledici birbaşa və ya dolayı yolla (bir növ ləqəb vasitəsilə) cgo tərəfindən yaradılan növü ifadə edərsə, həmişə səhv barədə məlumat verir.

Bağlayıcı

Bağlayıcı indi defolt olaraq ELF platformalarında GNU qurma identifikatorunu (ELF girişi NT_GNU_BUILD_ID) və macOS-da UUID (Mach-O yükləmə əmri LC_UUID) yaradır. Quraşdırma ID və ya UUID Go build ID-dən əldə edilir. Bu, -B none linker bayrağı ilə söndürülə bilər və ya istifadəçi tərəfindən müəyyən edilmiş onaltılıq dəyərlə -B 0xNNNN əlaqələndirici bayrağı ilə ləğv edilə bilər.

Promosyon

-də deyildiyi kimi 1.22 buraxılış qeydlərinə keçin, Go 1.24-ün quraşdırılması üçün indi Go 1.22.6 və ya daha sonrakı versiyaların quraşdırılması tələb olunur. Tərtibatçılar gözləyirlər ki, Go 1.26-nın buraxılması üçün Go 1.24 və ya daha sonrakı versiyaların buraxılışını tələb edəcək.

Standart Kitabxana

Kataloqla məhdudlaşdırılmış fayl sisteminə giriş

Yeni tip os.root Müəyyən bir kataloq daxilində fayl sistemi əməliyyatlarını yerinə yetirmək imkanı verir.

Function os.OpenRoot kataloqu açır və qaytarır os.root. Metodlar aktivdir os.root həmin kataloqda işləyin və kataloqdan kənar simvolik keçidləri izləyənlər də daxil olmaqla, yolların kataloqdan kənar yerlərə istinad etməsinə icazə verməyin. os.Root-dakı üsullar OS paketində mövcud olan fayl sistemi əməliyyatlarının əksəriyyətini əks etdirir, məsələn, os.Root.Open, os.Root.Yarat, os.Root.Mkdir и os.Root.Stat.

Yeni benchmark xüsusiyyəti

Benchmarks indi daha sürətli, daha az səhvə meylli metoddan istifadə edə bilər sınaq.B.Loop bN-ni əhatə edən tipik loop strukturları əvəzinə b.Loop() { … } kimi bir etalon üzərində təkrarlamaq. Bu, iki mühüm üstünlük təklif edir:

  • Benchmark funksiyası hər bir hesablamada bir dəfə yerinə yetirilir, buna görə də bahalı quraşdırma və təmizləmə addımları yalnız bir dəfə yerinə yetirilir.
  • Funksiya çağırış parametrləri və nəticələri yaşayır, kompilyatorun döngə gövdəsini tam optimallaşdırmasının qarşısını alır.

Təkmilləşdirilmiş yekunlaşdırıcılar

Yeni xüsusiyyət runtime.AddCleanup ilə müqayisədə daha çevik, daha səmərəli və daha az səhvə meyilli tamamlama mexanizmidir runtime.SetFinalizer. AddCleanup, obyekt əlçatmaz olan kimi işə salınacaq obyektə təmizləmə funksiyasını əlavə edir. Bununla belə, SetFinalizer-dən fərqli olaraq, birdən çox təmizlik bir obyektə əlavə edilə bilər, təmizləmələr daxili göstəricilərə əlavə edilə bilər, təmizlənmələr adətən obyektlər dövrə yaradan zaman sızmalara səbəb olmur və təmizləmələr obyektin və ya onun işarə etdiyi obyektlərin boşaldılmasını gecikdirmir. Yeni kod SetFinalizer əvəzinə AddCleanup-a üstünlük verməlidir.

Yeni zəif paket

Yeni paket zəif zəif göstəriciləri təmin edir.

Zəif göstəricilər dəyərlərin xəritələşdirilməsi üçün zəif lüğətlər, paketlə əhatə olunmayan hər şey üçün kanonikləşdirmə lüğətləri kimi yaddaşdan səmərəli strukturlar yaratmaq üçün təmin edilən aşağı səviyyəli primitivdir. unikal, və müxtəlif növ keşlər. Bu istifadə hallarını dəstəkləmək üçün bu buraxılış da təmin edir runtime.AddCleanup и maphash.Müqayisəli.

Yeni kripto/mlkem paketi

Yeni paket kripto/mlkem ML-KEM-768 və ML-KEM-1024 tətbiq edir.

ML-KEM, əvvəllər Kyber kimi tanınan və müəyyən edilmiş post-kvant açar mübadiləsi mexanizmidir FIPS 203.

Yeni crypto/hkdf, crypto/pbkdf2 və crypto/sha3 paketləri

Yeni paket kripto/hkdf HMAC əsaslı “Çıxar və genişləndir” açar törəmə funksiyasını HKDF-də müəyyən edildiyi kimi həyata keçirir. RFC 5869.

Yeni paket kripto/pbkdf2 -də müəyyən edildiyi kimi parola əsaslanan açar törəmə funksiyasını PBKDF2 həyata keçirir RFC 8018.

Yeni paket kripto/sha3 SHA-3 hash funksiyasını və SHAKE və cSHAKE genişləndirilə bilən çıxış funksiyalarını tətbiq edir. FIPS 202.

Hər üç paket mövcud golang.org/x/crypto/… paketlərinə əsaslanır.

FIPS 140-3 Uyğunluğu

Bu buraxılış daxildir FIPS 140-3 uyğunluğunu təmin etmək üçün yeni mexanizmlər dəsti.

Go kripto modulu FIPS 140-3 təsdiq edilmiş alqoritmləri həyata keçirmək üçün şəffaf şəkildə istifadə edilən daxili standart kitabxana paketləri toplusudur. Təsdiq edilmiş alqoritmlər üçün Go kripto modulundan istifadə etmək üçün proqramlar dəyişikliklər tələb etmir.

Yeni mühit dəyişəni GOFIPS140, quruluşda istifadə etmək üçün Go kripto modulunun versiyasını seçmək üçün istifadə edilə bilər. Yeni GODEBUG quraşdırma fips140, iş vaxtında FIPS 140-3 rejimini aktivləşdirmək üçün istifadə edilə bilər.

Go 1.24 hazırda CMVP tərəfindən akkreditə olunmuş laboratoriya ilə sınaqdan keçirilən Go kriptovalyutası v1.0.0 modulunu ehtiva edir.

Yeni eksperimental paket testi/sinktesti

Yeni eksperimental paket sınaq/sinktest Paralel kodu sınamaq üçün dəstək verir.

  • Function synctest.run təcrid olunmuş bir "baloncuk" içində bir qrup goroutines çalışır. Paket funksiyasının qabarcığında vaxt saxta saatlarla işləyin.
  • Funksiyalar synctest.gözləyin cari qabarcıqda bütün goroutinlər bloklanana qədər gözləyin.

Təfərrüatlar paket sənədlərində tapıla bilər.

Sinktest paketi eksperimentaldır və GOEXPERIMENT=sinktest təyin edilməklə aktivləşdirilməlidir. Paket API gələcək buraxılışlarda dəyişə bilər. IN # 67434 Ətraflı təfərrüata baxıb rəy bildirə bilərsiniz.

Kitabxanada kiçik dəyişikliklər

arxiv

Arxiv/zip və arxiv/tardakı (*Writer.AddFS) tətbiqləri indi boş kataloq üçün kataloq başlığını yazır.

bytes

Paketi bytes iteratorlarla işləyən bir neçə funksiya əlavə edir:

  • Lines Bayt dilimində yeni sətirlə ayrılmış sətirlər üzərində iteratoru qaytarır.
  • SplitSeq ayırıcı ilə ayrılmış bayt diliminin bütün alt dilimləri üzərində iteratoru qaytarır.
  • SplitAfterSeq bayt diliminin alt dilimləri üzərində iteratoru qaytarır, separatorun hər baş verməsindən sonra bölünür.
  • FieldsSeq müəyyən edildiyi kimi, boşluq simvollarının ardıcıllığı ətrafında bayt diliminin alt dilimləri üzərində iteratoru qaytarır unicode.IsSpace
  • FieldsFuncSeq predikatı təmin edən Unicode kod nöqtələrinin ardıcıllığı ətrafında bayt diliminin alt dilimləri üzərində iteratoru qaytarır.

kripto/aes

Dəyəri qaytarın NewChipher artıq NewCTR, NewGCM, NewCBCEncrypter və NewCBCDecrypter üsullarını tətbiq etmir. Bu üsullar sənədsiz idi və bütün arxitekturalarda mövcud deyildi. İndi mənası Blok birbaşa müvafiq funksiyalara ötürülməlidir kripto/şifrə. Hal-hazırda, kripto/şifrə bu üsulları standart kitabxana tərəfindən dəstəklənməsə də, hələ də Blok dəyərlərində yoxlayır.

kripto/şifrə

Yeni xüsusiyyət NewGCMWithRandomNonce qayıdır AEAD, Seal zamanı təsadüfi bir zaman yaradaraq və onu şifrəli mətnə ​​əlavə etməklə AES-GCM-ni həyata keçirir.

Tətbiq axın, qayıtdı YeniCTR ilə istifadə edildikdə kripto/aes indi amd64 və arm64-də bir neçə dəfə daha sürətli.

YeniOFB, YeniCFBEncrypter и YeniCFBDDecrypter indi köhnəlmiş elan edilir. OFB və CFB rejimləri autentifikasiya olunmur, bu, ümumiyyətlə aktiv hücumlara açıq mətni manipulyasiya etməyə və bərpa etməyə imkan verir. Tətbiqlərdən istifadə etmək tövsiyə olunur AEAD müqabilində. Doğrulanmamış rejim varsa axın lazımdır, istifadə oluna bilər YeniCTR müqabilində.

kripto/ecdsa

PrivateKey.Sign görə indi deterministik bir imza yaradır RFC 6979, təsadüfilik mənbəyi sıfır olarsa.

kripto/md5

Dəyəri qaytarın md5.new, indi də interfeysi həyata keçirir kodlaşdırma.binaryappender.

kripto/rand

Function Oxumaq indi heç bir uğursuzluğa zəmanət verir. Əgər Oxu oxuyarkən xəta ilə qarşılaşırsa Oxucu, proqram həmişəlik dayandırılacaq. Qeyd edək ki, standart Reader həmişə uğurla işləmək üçün sənədləşdirilmişdir, ona görə də bu dəyişiklik yalnız Reader dəyişənini ləğv edən proqramlara təsir etməlidir. Bir istisna, 3.17-dən əvvəlki Linux nüvələridir, burada defolt Reader hələ də /dev/urandom açılır və uğursuz ola bilər.

Linux 6.11 və sonrakı versiyalarda Reader indi vDSO vasitəsilə getrandom sistem çağırışından istifadə edir. Bu, adətən kiçik oxunuşlar üçün bir neçə dəfə daha sürətli olur.

OpenBSD Reader-də indi arc4random_buf(3) istifadə edir.

Yeni xüsusiyyət Mətn indi kriptoqrafik cəhətdən təhlükəsiz təsadüfi mətn sətirlərini yarada bilər.

kripto/rsa

Açar yarat indi 1024 bitdən az açar uzunluğu tələb olunarsa, xəta qaytarır. Bütün Sign, Verify, Encrypt və Decrypt üsulları indi açar ölçüsü 1024 bitdən az olduqda xəta qaytarır. Belə açarlar təhlükəlidir və istifadə edilməməlidir. GODEBUG qurulur rsa1024min=0 köhnə davranışı bərpa edir, lakin Go tərtibatçıları bunu yalnız lazım olduqda və yalnız testlərdə etməyi tövsiyə edir, məsələn, test faylına //go:debug rsa1024min=0 xəttini əlavə etməklə. Yeni misal GenerateKey, istifadəsi asan standart 2024 bitlik test açarı təqdim edir.

İndi zəng etmək daha təhlükəsiz və daha səmərəlidir PrivateKey.Precompute üzrə PrivateKey.Validate. Precompute indi qismən doldurulmuş varlığında daha sürətli Əvvəlcədən hesablanmış dəyərlərməsələn, JSON-dan açar çıxararkən.

Paket indi Validate çağırılmadıqda belə daha etibarsız açarları rədd edir və Açar yarat indi pozulmuş təsadüfi mənbələr üçün yeni səhvləri qaytara bilər. Sahələr Priyomlar и Əvvəlcədən hesablanmış quruluşu Şəxsi Açar bəzi dəyərlər əskik olduqda belə indi istifadə olunur və təsdiqlənir. RSA açarlarının təhlili və çıxarılması üçün kripto/x509-da aşağıda təsvir edilən dəyişikliklər də var.

SignPKCS1v15 и DoğrulayınPKCS1v15 indi SHA-512/224, SHA-512/256 və SHA-3-ü dəstəkləyir.

Açar yarat indi özəl eksponent yaratmaq üçün bir qədər fərqli üsuldan istifadə edir (Euler funksiyası əvəzinə Karmixael funksiyası). Açarları yalnız sadə ədədlərdən xaricdən bərpa edən nadir tətbiqlər fərqli, lakin uyğun nəticələr verə bilər.

Açıq və gizli açarlar üzərində əməliyyatlar indi wasm-də iki dəfəyə qədər sürətlidir.

kripto/sha*

kripto/incə

Yeni xüsusiyyət DataIndependentTiming ilə istifadəçiyə müəyyən təlimatların məlumat dəyərinin vaxtına nisbətən dəyişdirilməməsini təmin edən arxitekturaya xas funksiyaları işə salmağa imkan verir. Bu, sabit vaxtda işləmək üçün yazılmış kodun prosessor səviyyəli funksiyalar tərəfindən optimallaşdırılmamasını təmin etmək üçün istifadə edilə bilər ki, dəyişən zamanda işləsin. Hal-hazırda WithDataIndependentTiming arm64-də PSTATE.DIT bitindən istifadə edir və bütün digər arxitekturalarda heç nə etmir. GODEBUG qurulur dataindependenttiming=1 bütün Go proqramı üçün DIT rejimini aktivləşdirir.

Buraxılış XORBytes girişlə tamamilə üst-üstə düşməlidir və ya tamamilə üst-üstə düşməlidir. Əvvəllər davranış başqa cür müəyyən edilməmişdi, halbuki indi XORBytes panikaya düşəcək.

kripto/TL

TLS serveri indi Şifrələnmiş Müştəri Salamını (ECH) dəstəkləyir. Bu funksiya sahəni doldurmaqla aktivləşdirilə bilər. Config.EncryptedClientHelloKeys.

Yeni Post-Kvant Açar Mübadilə Mexanizmi X25519MLKEM768 indi dəstəklənir və default olaraq aktiv olduqda Config.CurvePreferences sıfırdır. GODEBUG qurulur tlsmlkem=0 defaultu qaytarır.

Eksperimental X25519Kyber768Draft00 açar mübadiləsi üçün dəstək silindi.

Açar mübadiləsi sifarişi indi tamamilə kripto/tls paketi tərəfindən idarə olunur. Sifariş verin Config.CurvePreferences indi nəzərə alınmır və məzmunlar yalnız sahə doldurulduqda hansı açar mübadiləsinin daxil ediləcəyini müəyyən etmək üçün istifadə olunur.

Yeni sahə ClientHelloInfo.Extensions Müştəri Salam mesajında ​​qəbul edilən genişləndirmə identifikatorlarının siyahısını sadalayır. Bu TLS müştərilərinin barmaq izini almaq üçün faydalı ola bilər.

kripto/x509

GODEBUG qurulur x509sha1 silindi. Sertifikatlaşdırma. Doğrulayın artıq SHA-1 əsaslı imzaları dəstəkləmir.

OID indi interfeysləri həyata keçirir kodlaşdırma.binaryappender и kodlaşdırma.TextAppender.

Defolt sertifikat siyasəti sahəsi buradan dəyişdirildi Certificate.PolicyIdentifiers haqqında Sertifikat. Siyasətlər. Sertifikatları təhlil edərkən hər iki sahə doldurulacaq, lakin sertifikat siyasəti yaradarkən onlar Certificate.PolicyIdentifiers əvəzinə Certificate.Policies sahəsindən götürüləcək. Bu dəyişiklik geri qaytarıla bilər. GODEBUG quraşdırma x509usepolicies=0.

Sertifikat yaradın indi şablon sahəsindən keçərkən RFC 5280 uyğun metoddan istifadə edərək seriya nömrəsi yaradacaq Sertifikat.Serial Nömrəsi sıfır, çökmək əvəzinə.

Sertifikat. Doğrulayın indi RFC 5280 və RFC 9618-də müəyyən edildiyi kimi siyasət doğrulamasını dəstəkləyir. Yeni sahə VerifyOptions.CertificatePolicies məqbul siyasətlər dəstinə təyin oluna bilər OID-lər. Yalnız etibarlı siyasət qrafikləri olan sertifikat zəncirləri geri qaytarılacaq Sertifikat. Doğrulayın.

MarshalPKCS8PrivateKey indi etibarsız RSA açarını geri qaytarmaq əvəzinə xəta qaytarır. (MarshalPKCS1PrivateKey səhv qaytarılması yoxdur və etibarsız açarlar təmin edildikdə onun davranışı qeyri-müəyyən olaraq qalır.)

ParsePKCS1PrivateKey и ParsePKCS8PrivateKey indi kodlanmış CRT dəyərlərindən istifadə edin və doğrulayın, beləliklə, əvvəllər qəbul edilmiş etibarsız RSA açarlarını rədd edə bilərsiniz. İstifadəsi GODEBUG parametrləri x509rsacrt=0 CRT dəyərlərinin yenidən hesablanmasına qayıdır.

debug/elf

Paketi debug/elf Dinamik ELF (İcra edilə bilən və Bağlana bilən Format) fayllarında simvol versiyalarının idarə edilməsi üçün dəstək əlavə edir. Yeni üsul File.DynamicVersions ELF faylında müəyyən edilmiş dinamik versiyaların siyahısını qaytarır. Yeni üsul File.DynamicVersionNeeds Digər ELF obyektlərində müəyyən edilmiş bu ELF faylı tərəfindən tələb olunan dinamik versiyaların siyahısını qaytarır. Nəhayət, yeni sahələr Symbol.HasVersion и Symbol.VersionIndex simvolun versiyasını göstərin.

encoding

İki yeni interfeys TextAppender и BinaryAppender bayt diliminə obyektin mətn və ya ikili təsvirini əlavə etmək üçün təqdim edilmişdir. Bu interfeyslər eyni funksionallığı təmin edir TextMarshaler и BinaryMarshaler, lakin hər dəfə yeni bir dilim ayırmaq əvəzinə, məlumatları birbaşa mövcud dilimə əlavə edirlər. Bu interfeyslər hazırda TextMarshaler və/və ya BinaryMarshaler tətbiq edən standart kitabxana növləri ilə həyata keçirilir.

kodlaşdırma/json

Quraşdırarkən, dəyəri sıfır olarsa, struktur sahəsi etiketində sıfır sıfır seçimi olan struktur sahəsi buraxılacaq. Sahə növündə IsZero() bool metodu varsa, dəyərin sıfır olub olmadığını müəyyən etmək üçün istifadə olunacaq. Əks halda dəyər sıfır olarsa onun növü üçün null dəyəri. Niyyət sıfır dəyərləri buraxmaq olduqda, sıfır sahə etiketi buraxılmışdan daha təmiz və səhvlərə daha az meyllidir. Xüsusilə, omitempty-dən fərqli olaraq, sıfır sıfır sıfırları buraxır vaxt.zaman ümumi problemlər mənbəyi olan dəyərlər.

Hər iki omitempty və buraxılmış sıfır göstərilibsə, dəyər boş və ya sıfırdırsa (və ya hər ikisi) sahə buraxılacaq.

UnmarshalTypeError.Field indi daha ətraflı səhv mesajlarını təmin etmək üçün daxili strukturları ehtiva edir.

get/növləri

Len() int və At(int) T kimi metod cütlərinin ardıcıllığını ifşa edən bütün go/types məlumat strukturları indi eyni zamanda daha sadə koda imkan verən iteratorları qaytaran üsullara malikdir:

params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { istifadə edin (params.At(i)) }

Bu barədə:

param üçün := diapazon fn.İmza().Params().Dəyişənlər() { istifadə(param)}

Metodlar Interface.EmbeddedTypes Interface.ExplicitMethods İnterfeys. Metodlar MethodSet. Methods Adlandırılmışdır. Metodlar Əhatə dairəsi. Uşaqlar Struktur. Sahələr Dəyişənlər TypeList.Types TypeParamList.TypeParams Birlik.Şərtlər

hash/*

log/slog

Yeni DiscardHandler heç vaxt aktivləşdirilməyən və həmişə çıxışını rədd edən bir işləyicidir.

Səviyyəli и LevelVar indi interfeysi tətbiq edin kodlaşdırma.TextAppender.

riyaziyyat/*

xalis

ListenCondig indi dəstəkləndiyi sistemlərdə standart olaraq MPTCP-dən istifadə edir (hazırda yalnız Linux).

IP indi interfeysi həyata keçirir kodlaşdırma.TextAppender.

net/http

Məhdudiyyət dəyişdi nəqliyyat sorğuya cavab olaraq alınan 1xx məlumat cavablarına. Əvvəllər bu, sorğunu dayandıracaq və 5-dən çox 1xx cavabı aldıqdan sonra xəta qaytaracaqdı. Bu, indi yalnız bütün 1xx cavablarının ümumi ölçüsü konfiqurasiya parametrindən artıq olduqda xəta qaytarır Nəqliyyat.MaxResponseHeaderBytes.

Həmçinin, sorğuda izləmə çəngəl olduqda net/http/httptrace.ClientTrace.Got1xxResponse, indi cavabların ümumi sayında 1xx məhdudiyyəti yoxdur. Got1xxResponse çəngəl sorğunu dayandırmaq üçün xəta qaytara bilər.

nəqliyyat и server indi HTTP/2 protokol parametrlərinin konfiqurasiyasına imkan verən HTTP2 sahəsi var.

Yeni sahələr Server.Protokollar и Nəqliyyat.Protokollar server və ya müştərinin istifadə etdiyi HTTP protokollarını konfiqurasiya etmək üçün sadə bir yol təqdim edir.

Server və müştəri şifrələnməmiş HTTP/2 bağlantılarını dəstəkləmək üçün konfiqurasiya edilə bilər.

Zaman Server.Protokollar UnencrypterHTTP2 ehtiva edirsə, server şifrələnməmiş portlarda HTTP/2 bağlantılarını qəbul edəcək. Server eyni portda həm HTTP/1, həm də şifrələnməmiş HTTP/2-ni qəbul edə bilər.

Zaman Nəqliyyat.Protokollar ŞifrələnməmişHTTP2 ehtiva edir və HTTP1 ehtiva etmir, nəqliyyat ünvanlar üçün şifrələnməmiş HTTP/2 istifadə edəcək http://. Nəqliyyat həm HTTP/1, həm də şifrələnməmiş HTTP/2-dən istifadə etmək üçün konfiqurasiya edilibsə, o, HTTP/1-dən istifadə edəcək.

Şifrələnməmiş HTTP/2 üçün dəstək "Forward-Learning ilə HTTP/2"dən istifadə edir (RFC 9113, bölmə 3.3). Köhnəlmiş “Upgrade: h2c” başlığı dəstəklənmir.

net/netip

Əlavə et, AdrPort и Prefiks İndi interfeysləri tətbiq edin kodlaşdırma.binaryappender и kodlaşdırma.TextAppender.

net/url

URL indi də interfeysi həyata keçirir kodlaşdırma.binaryappender.

os/istifadəçi

Windows -da Cari indi Windows Nano Serverdə istifadə edilə bilər. Tətbiq Nano Serverdə olmayan NetApi32 kitabxanasının funksiyalarından istifadə etməmək üçün yeniləndi.

Windows -da Cari, Axtarış и Axtarış ID indi aşağıdakı daxili istifadəçi xidməti hesablarını dəstəkləyir:

  • NT OTORITYSYSTEM
  • NT AUTORITYYERLİ XİDMƏT
  • NT OTORITYNETWORK SERVICE

Windows -da Cari cari istifadəçi bir çox korporativ istifadəçilər üçün adi hal olan yavaş domenə qoşulduqda əhəmiyyətli dərəcədə sürətləndirildi. Tamamlanması bir neçə saniyə, hətta dəqiqə çəkə bilən əvvəlki tətbiqlə müqayisədə yeni tətbiqin performansı indi millisaniyədir.

Windows -da Cari indi cari başlıq başqa istifadəçini təqlid edərkən proses sahibi istifadəçisini qaytarır. Əvvəllər bu xətanı qaytarırdı.

regexp

Regexp indi interfeysi həyata keçirir kodlaşdırma.TextAdapter.

uzunluğu

Function GOROOT indi köhnəlmişdir. Daha yeni mühitlərdə siz “go” binarını təyin etmək üçün sistem yolundan, GOROOT-u təyin etmək üçün isə go env GOROOT-dan istifadə etməyə üstünlük verməlisiniz.

strings

Paketi strings iteratorlarla işləmək üçün bir neçə funksiya əlavə edir:

  • Lines Sətirdə yeni sətirlə ayrılmış sətirlər üzərində iteratoru qaytarır.
  • SplitSeq ayırıcı ilə ayrılmış sətirin bütün alt sətirləri üzərində iteratoru qaytarır.
  • SplitAfterSeq setirin alt sətirləri üzərində iteratoru qaytarır, ayırıcının hər baş verməsindən sonra bölünür.
  • FieldsSeq müəyyən edildiyi kimi boşluq simvollarının ardıcıllığı ətrafında sətirin alt sətirləri üzərində iteratoru qaytarırunicode.IsSpace
  • FieldsFuncSeq Predikatı təmin edən Unicode kod nöqtələrinin ardıcıllığı ətrafında sətir alt sətirləri üzərində iteratoru qaytarır.

senkronize

Tətbiq sync.map performansını yaxşılaşdırmaq üçün, xüsusən lüğət dəyişiklikləri üçün dəyişdirildi. Məsələn, böyük lüğətlərdə ayrı-ayrı dəst dəyişikliyi mübahisəsi ehtimalı daha azdır və bu, aşağı mübahisəli lüğət yükünə nail olmaq üçün daha çox vaxt tələb etmir.

Hər hansı problemlə qarşılaşsanız, köhnə tətbiqə qayıtmaq üçün tikinti zamanı GOEXPERIMENT=nosynchashtriemap təyin edin və zəhmət olmasa problem formasını doldurun.

test

Yeni üsullar T.Kontekst и B. Kontekst test tamamlandıqdan sonra və test təmizləmə funksiyaları yerinə yetirilməzdən əvvəl atılan konteksti qaytarın.

Yeni üsullar T.Çdir и B.Çdir test və ya etalon müddəti ərzində iş kataloqunu dəyişdirmək üçün istifadə edilə bilər.

mətn/şablon

Şablonlar indi diapazon-over-func və range-over-int-i dəstəkləyir.

vaxt

vaxt indi interfeysləri həyata keçirir kodlaşdırma.binaryappender и kodlaşdırma.TextAppender.

Ports

Linux

Olduğu kimi elan etdi Go 1.23 buraxılış qeydlərinə görə, Go 1.24 Linux nüvəsinin 3.2 və ya daha sonrakı versiyasını tələb edir.

Darvin

Go 1.24, macOS 11 Big Sur-da işləyəcək son buraxılışdır. Go 1.25 macOS 12 Monterey və ya daha yenisini tələb edəcək.

WebAssembly

Go:wasmexport kompilyator direktivi funksiyaları WebAssembly hostuna ixrac etmək üçün Go proqramlarına əlavə edilmişdir.

WebAssembly System Interface Preview 1-də (GOOS=wasip1 GOARCH=wasm), Go 1.24 Go proqramının qurulmasını dəstəkləyir reaktor/kitabxana -buildmode=c-shared qurma bayrağını təyin etməklə.

İndi go:wasmimport funksiyaları üçün arqument və ya nəticə növləri kimi daha çox növə icazə verilir. Xüsusilə, müəyyən növlərə bool, string, uintptr və göstəricilərə icazə verilir (ətraflı məlumatlara baxın sənədləşdirmə), 32-bit və 64-bit tam və üzən nöqtə növləri ilə yanaşı, və artıq icazə verilən unsafe.Pointer. Bu növlərə go:wasmexport funksiyaları üçün arqument və ya nəticə növləri kimi də icazə verilir.

WebAssembly üçün dəstək faylları misc/wasm-dan lib/wasm-a köçürüldü.

İlkin yaddaş sahəsi xüsusilə kiçik WebAssembly proqramları üçün əhəmiyyətli dərəcədə azaldılır.

Windows

32-bit pəncərələr/arm portu (GOOS=windows GOARCH=arm) xarab kimi qeyd edilib. Təfərrüatlar # 70705

Mənbə: linux.org.ru

Добавить комментарий