Po šešių mėnesių bus išleista nauja Go kalbos versija, 1.24 versija Eiti 1.23. Dauguma pakeitimų susiję su įrankių grandinės, vykdymo laiko ir bibliotekų diegimu. Kaip visada, leidimas numato suderinamumo pažadas Go 1. Kalbų kūrėjai tikisi, kad beveik visos Go programos ir toliau bus kompiliuojamos ir veiks kaip anksčiau.
Kalbos pokyčiai
„Go 1.24“ dabar visiškai palaiko bendro tipo slapyvardžiai: tipo slapyvardį galima parametruoti kaip deklaruotą tipą. Išsamią informaciją rasite kalbos specifikacijos. Kol kas šią funkciją galima išjungti nustačius GOEXPERIMENT=noaliastypeparams; Tačiau parinktis aliastypeparams bus pašalinta naudojant Go 1.25.
Įrankiai
Eik komandą
Dabar „Go“ moduliai gali sekti vykdomąsias priklausomybes naudodami go.mod įrankio direktyvą. Taip nebereikės ankstesnio būdo pridėti įrankių kaip tuščią importą faile, paprastai vadinamame „tools.go“. Go tool komanda dabar gali paleisti šiuos įrankius be įrankių, kurie pateikiami kartu su Go. Daugiau informacijos rasite adresu dokumentacija.
Naujoji -tool vėliavėlė, skirta go get, verčia įrankių direktyvas įtraukti į dabartinį nurodytų paketų modulį, o ne pridedant reikalavimo direktyvas.
Naujas meta modelio įrankis reiškia visus dabartinio modulio įrankius. Tai gali būti naudojama norint juos visus atnaujinti naudojant „go get“ įrankį arba įdiegti juos į savo GOBIN katalogą naudojant „go install“ įrankį.
Vykdomieji failai, sukurti naudojant „go Run“ ir naujojo „go“ įrankio elgsena, dabar saugomi „Go build“ talpykloje. Tai leidžia pakartotinai paleisti dėl padidėjusios talpyklos. # 69290.
„Go build and go install“ komandos dabar priima žymą -json, kuri praneša apie kūrimo išvestį ir klaidas kaip struktūrinę JSON išvestį standartinėje išvestyje. Išsamią formato informaciją galite pamatyti go help buildjson.
Be to, „go test“ -json dabar praneša apie JSON išvesties ir kūrimo klaidas, sumaišytas su bandymo rezultatu JSON. Juos galima atskirti pagal naujus veiksmo tipus, bet jei dėl jų kyla problemų bandomojoje integravimo sistemoje, galite grįžti prie tekstinės versijos išvesties naudodami GODEBUG sąranka gotestjsonbuildtext=1.
Naujasis GOAUTH aplinkos kintamasis suteikia lankstų būdą leisti privačius modulius. Išsamią informaciją galite pamatyti apsilankę goauth.
Dabar įdiegta komanda go build pagrindinio modulio versija sudarytame dvejetainiame faile, remiantis žyma ir (arba) versijos valdymo įsipareigojimu. +Dirty priesaga bus pridėta, jei bus nepadarytų pakeitimų. Vėliava -buildvcs=false gali būti naudojama norint praleisti versijos valdymo informaciją iš dvejetainio.
naujas GODEBUG sąranka Toolchaintrace=1 dabar gali būti naudojamas sekti įrankių grandinės pasirinkimo procesą komandoje eiti.
Cgo
Cgo palaiko naujus C funkcijų komentarus, kad pagerintų vykdymo laiką. #cgo noescape cFunctionName nurodo kompiliatoriui, kad atmintis, perduota C funkcijai cFunctionName, nėra pašalinta. #cgo nocallback cFunctionName nurodo kompiliatoriui, kad C funkcija cFunctionName neatšaukia jokių Go funkcijų. Daugiau informacijos rasite adresu cgo dokumentacija.
Cgo šiuo metu atsisako kompiliuoti iškvietimus į C funkciją, kuri turi keletą nesuderinamų deklaracijų. Pavyzdžiui, jei f yra paskelbta ir kaip void f(int) ir void f(double), cgo praneš apie klaidą, o ne sugeneruos netinkamą iškvietimo seką f(0). Šios leidimo naujovė – patobulintas šios klaidos aptikimas, kai skirtinguose failuose atsiranda nesuderinamų deklaracijų. # 67699.
Objdump
Objdump įrankis dabar palaiko 64 bitų LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) ir S390X (GOARCH=s390x) išmontavimą.
Riebalai
Naujasis testų analizatorius praneša apie įprastas bandymo, fiksatoriaus, etalono ir pavyzdžių deklaracijų klaidas bandymų rinkiniuose, pvz., netinkamai suformuotus pavadinimus, neteisingus parašus arba pavyzdžius, kuriuose dokumentuojami neegzistuojantys identifikatoriai. Kai kurios iš šių klaidų gali sukelti bandymų nesėkmę.
Esamas printf analizatorius dabar praneša apie fmt.Printf(s) formos iškvietimų diagnostiką, kur s yra nepastovus formato eilutė be jokių kitų argumentų. Tokie skambučiai beveik visada yra klaida, nes s reikšmė gali turėti % simbolį; vietoj to naudokite fmt.Print. 60529. Šis patikrinimas paprastai aptinka dalykų esamame kode, todėl taikomas tik tada, kai kalbos versija (kaip nurodyta go.mod failo direktyvoje „go“ arba „//go:build“ komentaruose) yra bent „Go 1.24“, kad atnaujinant į „Go 1.24“ įrankių grandinę nebūtų ilgų integravimo pertraukų.
Esamas kūrimo žymų analizatorius dabar praneša apie diagnostiką, kai yra neteisinga kūrimo žyma senesnės versijos kūrimo apribojimas Eikite į //go:build direktyvą. Pavyzdžiui, //go:build go1.23.1 nurodo taško leidimą; vietoj to naudokite //go:build go1.23. # 64127.
Esamas kopijavimo užrakto analizatorius dabar praneša apie diagnostiką, kai kintamasis deklaruojamas triguboje „for“ kilpoje, pvz., i := iter(); padaryta (i); i = next(i) { … }, yra sinchronizavimo užraktas, pvz., sync.Mutex. Eiti 1.22 pakeitė tokių kilpų elgesį, kad kiekvienai iteracijai būtų sukurtas naujas kintamasis, nukopijuojant reikšmes iš ankstesnės iteracijos; Šis kopijavimas nėra saugus spynoms. # 66387.
GOCACHEPROG
Vidinis cmd/go dvejetainis ir bandomasis talpyklos mechanizmas dabar gali būti įgyvendintas antriniais procesais, įgyvendinančiais JSON protokolą tarp cmd/go įrankio ir antrinio proceso, pavadinto GOCACHEPROG aplinkos kintamuoju. Anksčiau tai buvo skirta GOEXPERIMENT. Išsamią protokolo informaciją galite pamatyti dokumentacija.
Baigimo laikas
Keletas vykdymo laiko našumo patobulinimų procesoriaus sąnaudas sumažino vidutiniškai 2–3 % pagal tipinių etalonų rinkinį. Rezultatai gali skirtis priklausomai nuo programos. Šie patobulinimai apima naują integruotą žemėlapio įgyvendinimą, pagrįstą Švedų stalai, efektyvesnis mažų objektų atminties paskirstymas ir naujas vidinis mutex vykdymo laikas.
Naują integruotą žemėlapio įgyvendinimą ir naują vidinį vykdymo laiko mutex galima išjungti, kūrimo metu nustatant atitinkamai GOEXPERIMENT=noswissmap ir GOEXPERIMENT=nospinbitmutex.
Kompiliatorius
Kompiliatorius jau uždraudė apibrėžti naujus metodus su imtuvų tipais, kuriuos sugeneravo cgo, tačiau šį apribojimą buvo galima apeiti naudojant tipo slapyvardį. „Go 1.24“ dabar visada praneša apie klaidą, jei imtuvas tiesiogiai arba netiesiogiai nurodo cgo sugeneruotą tipą (per tipo slapyvardį).
Linker
Dabar susiejimo priemonė generuoja GNU versijos identifikatorių (ELF įrašas NT_GNU_BUILD_ID) ELF platformose ir UUID (Mach-O įkėlimo komanda LC_UUID) pagal numatytuosius nustatymus MacOS. Sukūrimo ID arba UUID yra išvestas iš „Go“ versijos ID. Tai galima išjungti naudojant žymą -B none linker arba nepaisyti naudojant -B 0xNNNN saito vėliavėlę su vartotojo nurodyta šešioliktaine reikšme.
Skatinimas
Kaip nurodyta Eikite į 1.22 laidos pastabas, „Go 1.24“ dabar reikia įdiegti „Go 1.22.6“ arba naujesnę versiją. Kūrėjai tikisi, kad norint išleisti „Go 1.26“ reikės taško „Go 1.24“ ar naujesnės versijos.
Standartinė biblioteka
Katalogų apribota prieiga prie failų sistemos
Naujas tipas os.root Suteikia galimybę atlikti failų sistemos operacijas konkrečiame kataloge.
Funkcija os.OpenRoot atidaro katalogą ir grįžta os.root. Metodai įjungti os.root veikti tame kataloge ir neleisti keliams nukreipti į vietas, esančias už katalogo ribų, įskaitant tas, kurios seka simbolines nuorodas už katalogo ribų. os.Root metodai atspindi daugumą failų sistemos operacijų, galimų OS pakete, įskaitant, pavyzdžiui, os.Šaknis.Atidaryti, os.Šaknis.Sukurti, os.Šaknis.Mkdir и os.Root.Stat.
Nauja etaloninė funkcija
Dabar lyginamieji rodikliai gali naudoti greitesnį, mažiau klaidų metodą testavimas.B.Kilpa kartoti etaloną, pvz., b.Loop() { … }, o ne tipines kilpos struktūras, apimančias bN, pvz., diapazonui bN Tai suteikia du reikšmingus pranašumus:
- Palyginimo funkcija vykdoma tiksliai vieną kartą per skaičių, todėl brangūs sąrankos ir valymo veiksmai atliekami tik vieną kartą.
- Funkcijų iškvietimo parametrai ir rezultatai veikia toliau, todėl kompiliatorius negali visiškai optimizuoti ciklo korpuso.
Patobulinti finalizatoriai
Nauja funkcija vykdymo laikas.AddCleanup yra užbaigimo mechanizmas, kuris yra lankstesnis, efektyvesnis ir mažiau linkęs į klaidas vykdymo laikas.SetFinalizer. AddCleanup prie objekto prideda valymo funkciją, kuri bus paleista, kai tik objektas taps nepasiekiamas. Tačiau, skirtingai nei SetFinalizer, prie vieno objekto galima prijungti kelis išvalymus, o išvalymus galima pridėti prie vidinių rodyklių, išvalymas paprastai nesukelia nutekėjimo, kai objektai sudaro ciklą, o valymas neatidėlioja objekto ar objektų, į kuriuos jis nukreipiamas, atšaukimo. Naujam kodui turėtų būti teikiama pirmenybė „AddCleanup“, o ne „SetFinalizer“.
Nauja silpna pakuotė
Nauja pakuotė silpnas pateikia silpnas nuorodas.
Silpnosios rodyklės yra žemo lygio primityvus, skirtas sukurti atmintį taupančias struktūras, pvz., silpnus reikšmių atvaizdavimo žodynus, kanonizavimo žodynus viskam, kas neapima paketo. unikalus, ir įvairių tipų talpyklos. Siekiant palaikyti šiuos naudojimo atvejus, šiame leidime taip pat numatyta vykdymo laikas.AddCleanup и maphash.Palyginti.
Naujas crypto/mlkem paketas
Nauja pakuotė crypto/mlkem įgyvendina ML-KEM-768 ir ML-KEM-1024.
ML-KEM yra postkvantinis raktų mainų mechanizmas, anksčiau žinomas kaip Kyber ir nurodytas FIPS 203.
Nauji paketai crypto/hkdf, crypto/pbkdf2 ir crypto/sha3
Nauja pakuotė crypto/hkdf įgyvendina HMAC pagrįstą „Extract-and-Expand“ raktų išvedimo funkciją HKDF, kaip apibrėžta RFC 5869.
Nauja pakuotė crypto/pbkdf2 įgyvendina slaptažodžiu pagrįstą raktų išvedimo funkciją PBKDF2, kaip apibrėžta RFC 8018.
Nauja pakuotė crypto/sha3 įgyvendina SHA-3 maišos funkciją ir SHAKE bei cSHAKE išplečiamas išvesties funkcijas, kaip apibrėžta FIPS 202.
Visi trys paketai yra pagrįsti esamais golang.org/x/crypto/… paketais.
FIPS 140-3 atitiktis
Šis leidimas apima naujas mechanizmų rinkinys, užtikrinantis FIPS 140-3 atitiktį.
„Go“ kriptovaliutų modulis yra vidinių standartinių bibliotekos paketų rinkinys, kuris skaidriai naudojamas FIPS 140-3 patvirtintiems algoritmams įgyvendinti. Programoms nereikia keisti, kad būtų galima naudoti Go kripto modulį patvirtintiems algoritmams.
Naujas aplinkos kintamasis GOFIPS140 gali būti naudojamas norint pasirinkti „Go“ kriptovaliutų modulio versiją, kuri bus naudojama kuriant. Nauja GODEBUG sąranka fips140 gali būti naudojamas norint įjungti FIPS 140-3 režimą vykdymo metu.
„Go 1.24“ apima „Go“ šifravimo modulį v1.0.0, kuris šiuo metu bandomas su CMVP akredituota laboratorija.
Naujas eksperimentinis paketo testavimas / sinchronizavimas
Naujas eksperimentinis paketas testavimas / sinchronizavimas Teikia palaikymą vienu metu veikiančio kodo testavimui.
- Funkcija synctest.run paleidžia gorutinų grupę izoliuotame „burbule“. Paketo funkcijos burbule laikas dirbti su klaidingais laikrodžiais.
- Funkcijos sinchronizuoti.palaukite palaukite, kol visos gorutinos bus užblokuotos dabartiniame burbule.
Išsamią informaciją rasite pakuotės dokumentacijoje.
Sinchronizavimo testo paketas yra eksperimentinis ir turi būti įgalintas nustačius GOEXPERIMENT=synctest. Ateities leidimuose paketo API gali pasikeisti. IN # 67434 Galite pamatyti daugiau informacijos ir pateikti atsiliepimų.
Nedideli pakeitimai bibliotekoje
archyvas
(*Writer.AddFS) diegimai archyve/zip ir archyve/tar dabar rašo tuščio katalogo katalogo antraštę.
baitų
Pakuotė baitų prideda keletą funkcijų, kurios veikia su iteratoriais:
- Linijos Grąžina iteratorių per nauja eilute atskirtas eilutes baitų skiltyje.
- SplitSeq grąžina iteratorių visuose baitų pjūviuose, atskirtuose skyrikliu.
- SplitAfterSeq grąžina iteratorių per baitų skilties poskyrius, padalytus po kiekvieno atskyriklio atsiradimo.
- LaukaiSeq grąžina iteratorių per baito pjūvio dalis aplink tarpo simbolių sekas, kaip apibrėžta unikodas.IsSpace
- FieldsFuncSeq grąžina iteratorių per baitų pjūvio dalis aplink Unikodo kodo taškų sekas, atitinkančias predikatą.
crypto/aes
Grąžinimo vertė NewChipher nebediegia NewCTR, NewGCM, NewCBCEncrypter ir NewCBCDecrypter metodų. Šie metodai nebuvo dokumentuoti ir prieinami ne visose architektūrose. Dabar prasmė Blokuoti turi būti tiesiogiai perduotos atitinkamoms funkcijoms kriptovaliuta / šifras. Šiuo metu kriptovaliuta / šifras vis dar tikrina šiuos metodus bloko reikšmėse, net jei standartinė biblioteka jų nebepalaiko.
kriptovaliuta / šifras
Nauja funkcija NewGCMWithRandomNonce grįžta AEAD, kuris įgyvendina AES-GCM, sugeneruodamas atsitiktinį nonce per Seal ir pridėdamas jį prie šifruoto teksto.
Vykdymas Srautas, grįžo Naujas PR kai naudojamas su crypto/aes dabar kelis kartus greičiau amd64 ir arm64.
NaujasisOFB, NaujasCFBEšifratorius и Naujas CFBD iššifratorius dabar paskelbti pasenusiais. OFB ir CFB režimai yra neautentifikuoti, todėl aktyvios atakos paprastai leidžia manipuliuoti ir atkurti paprastą tekstą. Rekomenduojama naudoti programas AEAD mainais. Jei neautentifikuotas režimas Srautas būtina, galima naudoti Naujas PR mainais.
kriptovaliuta/ecdsa
PrivateKey.Sign dabar sukuria deterministinį parašą pagal RFC 6979, jei atsitiktinumo šaltinis yra nulis.
crypto/md5
Grąžinimo vertė md5.naujas, dabar taip pat įdiegia sąsają kodavimas.dvejetainis priedas.
kriptovaliuta / randas
Funkcija skaityti dabar garantuoja jokių gedimų. Jei skaitymo metu atsiranda klaida Skaitytojas, programa bus nutraukta visam laikui. Atminkite, kad numatytasis skaitytuvas visada sėkmingai veikia, todėl šis pakeitimas turėtų turėti įtakos tik programoms, kurios nepaiso Reader kintamojo. Viena išimtis yra Linux branduoliai iki 3.17, kur numatytasis skaitytuvas vis tiek atidaro /dev/urandom ir gali nepavykti.
„Linux 6.11“ ir vėlesnėse versijose „Reader“ dabar naudoja atsitiktinį sistemos iškvietimą per vDSO. Tai yra kelis kartus greičiau, paprastai mažiems skaitymams.
OpenBSD Reader dabar naudoja arc4random_buf(3).
Nauja funkcija Tekstas dabar gali generuoti kriptografiškai saugias atsitiktines teksto eilutes.
kriptovaliuta/rsa
GenerateKey dabar grąžina klaidą, jei reikalaujama, kad rakto ilgis būtų mažesnis nei 1024 bitai. Visi pasirašymo, patvirtinimo, šifravimo ir iššifravimo metodai dabar pateikia klaidą, jei naudojami su mažesniu nei 1024 bitų raktu. Tokie raktai yra nesaugūs ir neturėtų būti naudojami. GODEBUG nustatymas rsa1024min=0 atkuria seną elgseną, tačiau Go kūrėjai rekomenduoja tai daryti tik esant būtinybei ir tik testų metu, pavyzdžiui, į bandomąjį failą įtraukiant eilutę //go:debug rsa1024min=0. Nauja pavyzdys „GenerateKey“ suteikia paprastą naudoti standartinį 2024 bitų bandomąjį raktą.
Dabar skambinti saugiau ir efektyviau PrivateKey.Precompute į PrivateKey.Validate. Išankstinis skaičiavimas dabar vyksta greičiau, kai yra iš dalies užpildytas Iš anksto apskaičiuotos vertės, pavyzdžiui, išgaunant raktą iš JSON.
Dabar paketas atmeta daugiau negaliojančių raktų, net kai nėra iškviečiamas patvirtinimas, ir GenerateKey dabar gali grąžinti naujas klaidas sugedusiems atsitiktinumo šaltiniams. Laukai Primes и Iš anksto apskaičiuota struktūra PrivateKey dabar yra naudojami ir patvirtinami net tada, kai trūksta kai kurių reikšmių. Taip pat yra crypto/x509 pakeitimų, skirtų analizuoti ir išgauti RSA raktus, aprašyti toliau.
PasirašykitePKCS1v15 и Patvirtinkite PKCS1v15 dabar palaiko SHA-512/224, SHA-512/256 ir SHA-3.
GenerateKey dabar naudoja šiek tiek kitokį metodą privataus eksponento generavimui (Carmichael funkcija vietoj Eulerio funkcijos). Retos programos, kurios išoriškai atkuria raktus tik iš pirminių skaičių, gali duoti skirtingus, bet suderinamus rezultatus.
Operacijos su viešaisiais ir privačiais raktais dabar yra iki dviejų kartų greitesnės naudojant wasm.
crypto/sha*
- crypto/sha1: grąžinama vertė sha1.Naujas dabar taip pat įdiegia sąsają kodavimas.dvejetainis priedas.
- crypto/sha256: vertės grąžintos sha256.Naujas и sha256.Naujas224 dabar taip pat įdiegti sąsają kodavimas.dvejetainis priedas.
- crypto/sha512: vertės grąžintos sha512.Naujas, sha512.Naujas384, sha512.Naujas512_224 и sha512.Naujas512_256, dabar taip pat įdiekite sąsają kodavimas.dvejetainis priedas.
kriptovaliuta / subtilus
Nauja funkcija Su „DataIndependentTiming“. leidžia vartotojui vykdyti funkciją su įjungtomis architektūrai būdingomis funkcijomis, užtikrinančiomis, kad tam tikros instrukcijos nebūtų keičiamos atsižvelgiant į duomenų vertės laiką. Tai gali būti naudojama siekiant užtikrinti, kad kodas, parašytas veikti pastoviu laiku, nebuvo optimizuotas procesoriaus lygio funkcijomis, kad jis veiktų kintamu laiku. Šiuo metu WithDataIndependentTiming naudoja PSTATE.DIT bitą arm64 ir nieko nedaro visose kitose architektūrose. GODEBUG nustatymas dataindependenttiming=1 įjungia DIT režimą visai Go programai.
Produkcija XORbaitai turi visiškai arba išvis nesutapti su įvestimi. Anksčiau elgesys buvo neapibrėžtas kitaip, o dabar XORBytes ims panikuoti.
crypto/tls
TLS serveris dabar palaiko Encrypted Client Hello (ECH). Šią funkciją galima įjungti užpildžius laukelį. Config.EncryptedClientHelloKeys.
Naujas pokvantinių raktų mainų mechanizmas X25519MLKEM768 dabar palaikoma ir įjungta pagal numatytuosius nustatymus, kai Config.CurvePreferences yra nulis. GODEBUG nustatymas tlsmlkem=0 grąžina numatytuosius nustatymus.
Eksperimentinio X25519Kyber768Draft00 raktų keitimo palaikymas buvo pašalintas.
Raktų keitimo užsakymą dabar tvarko tik kripto/tls paketas. Užsakyti Config.CurvePreferences dabar nepaisoma, o turinys naudojamas tik nustatant, kuriuos raktų mainus įtraukti, kai laukas užpildomas.
Naujas laukas ClientHelloInfo.Extensions Pateikiamas plėtinių identifikatorių, gautų pranešime „Klientas Sveiki“, sąrašas. Tai gali būti naudinga imant TLS klientų pirštų atspaudus.
crypto/x509
GODEBUG nustatymas x509sha1 buvo pašalintas. Sertifikavimas. Patvirtinkite nebepalaiko SHA-1 pagrįstų parašų.
OID dabar diegia sąsajas kodavimas.dvejetainis priedas и kodavimas.Teksto priedas.
Numatytasis sertifikato politikos laukas buvo pakeistas iš Sertifikatas. PolitikaIdentifiers apie Sertifikatas. Politika. Nagrinėjant sertifikatus bus užpildyti abu laukai, tačiau kuriant sertifikatų politiką jie bus paimti iš lauko Certificate.Policies, o ne iš Certificate.PolicyIdentifiers. Šį pakeitimą galima grąžinti. GODEBUG sąranka x509usepolicies=0.
Sukurti sertifikatą dabar sugeneruos serijos numerį, naudodamas su RFC 5280 suderinamą metodą, kai perduoda šablono lauką Sertifikatas. Serijos numeris nulis, užuot sudužęs.
Sertifikatas. Patvirtinkite dabar palaiko politikos patvirtinimą, kaip apibrėžta RFC 5280 ir RFC 9618. Naujas laukas VerifyOptions.CertificatePolicies gali būti nustatytas priimtinas politikos rinkinys OID. Bus grąžintos tik sertifikatų grandinės su galiojančiomis politikos diagramomis Sertifikatas. Patvirtinkite.
MaršalasPKCS8PrivateKey dabar grąžina klaidą, o ne nuskaito netinkamą RSA raktą. (MaršalasPKCS1PrivateKey nėra klaidų grąžinimo, o jo elgsena, kai pateikiami neteisingi raktai, lieka neapibrėžta.)
ParsePKCS1PrivateKey и ParsePKCS8PrivateKey dabar naudoti ir patvirtinti užkoduotas CRT reikšmes, todėl gali atmesti netinkamus RSA raktus, kurie anksčiau buvo priimti. Naudojimas GODEBUG nustatymai x509rsacrt=0 grįžta į CRT reikšmių perskaičiavimą.
derinimas/elfas
Pakuotė derinimas/elfas Pridedamas simbolių versijų tvarkymo dinaminiuose ELF (vykdomojo ir susiejamo formato) failuose palaikymas. Naujas metodas File.DynamicVersions Grąžina ELF faile apibrėžtų dinaminių versijų sąrašą. Naujas metodas File.DynamicVersionNeeds Grąžina šiam ELF failui reikalingų dinaminių versijų, apibrėžtų kituose ELF objektuose, sąrašą. Pagaliau nauji laukai Simbolis.HasVersion и Simbolis.Versijos indeksas nurodykite simbolio versiją.
kodavimas
Dvi naujos sąsajos Teksto priedas и Dvejetainis priedas buvo pristatyti norint pridėti tekstinį arba dvejetainį objekto atvaizdavimą į baitų pjūvį. Šios sąsajos suteikia tokias pačias funkcijas kaip TextMarshaler и BinaryMarshaler, tačiau užuot kiekvieną kartą skyrę naują dalį, jie prideda duomenis tiesiai prie esamos dalies. Šiuo metu šias sąsajas įgyvendina standartiniai bibliotekos tipai, kuriuose jau įdiegta TextMarshaler ir (arba) BinaryMarshaler.
kodavimas/json
Kuriant, struktūros laukas su nauja omitzero parinktimi struktūros lauko žymoje bus praleistas, jei jo reikšmė lygi nuliui. Jei lauko tipas turi IsZero() bool metodą, jis bus naudojamas nustatyti, ar reikšmė lygi nuliui. Priešingu atveju vertė bus lygi nuliui nulinė jo tipo reikšmė. Lauko „Omitzero“ žyma yra aiškesnė ir mažiau klaidų sukelianti nei „omitmpty“, kai siekiama praleisti nulines reikšmes. Visų pirma, skirtingai nei omtempty, omitzero praleidžia nulius laikas.laikas vertybes, o tai yra dažnas problemų šaltinis.
Jei nurodytas ir omitempty, ir omitzero, laukas bus praleistas, jei reikšmė yra tuščia arba nulis (arba abu).
UnmarshalTypeError.Field dabar apima integruotas struktūras, skirtas pateikti išsamesnius klaidų pranešimus.
go/types
Visos go/types duomenų struktūros, atskleidžiančios metodų porų sekas, pvz., Len() int ir At(int) T, dabar taip pat turi metodus, kurie grąžina iteratorius, leidžiančius paprastesnį kodą, pavyzdžiui:
params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
Apie tai:
for param := range fn.Signature().Params().Variables() { use(param)}
Metodai: Interface.EmbeddedTypes Interface.ExplicitMethods Sąsaja.Metodai MethodSet.Methods Pavadinta.Metodai Taikymo sritis.Vaikai Struktūra.Laukai Kortelė.Kintamieji Tipų sąrašas. Tipai TypeParamList.TypeParams Sąjunga.Sąlygos
maiša/*
- hash/adler32: grąžinama vertė Naujienos, dabar taip pat įdiegia sąsają kodavimas.dvejetainis priedas
- hash/crc32: vertės grąžintos Naujienos и NaujaIEEE, dabar taip pat įdiekite sąsają kodavimas.dvejetainis priedas
- hash/crc64: grąžinama vertė Naujienos, dabar taip pat įdiegia sąsają kodavimas.dvejetainis priedas
- maiša/fnv: vertės grąžintos "New32" Nauja32a "New64" Nauja64a "New128" и Nauja128a, dabar taip pat įdiekite sąsają kodavimas.dvejetainis priedas
- maiša/mafašas: naujos funkcijos Palyginamas и Rašyti palyginamąjį gali apskaičiuoti bet kokios vertės maišą, kurią galima palyginti. Tai leidžia sumaišyti viską, ką galima naudoti kaip Go žodyno raktą.
rąstas/slogas
Naujas DiscardHandler yra tvarkytuvas, kuris niekada neįjungtas ir visada atmeta savo išvestį.
Lygis и LevelVar dabar įdiekite sąsają kodavimas.Teksto priedas.
matematika/*
- matematika/didelis: Plūdė, Žiniasklaida и Žiurkė dabar įdiekite sąsają kodavimas.Teksto priedas.
- matematika/rand: nebenaudojami aukščiausio lygio funkcijų iškvietimai Sėklos nebeturi jokio poveikio. Norėdami atkurti seną elgesį, galite naudoti GODEBUG sąranka randseednop=0. Daugiau konteksto pasiūlyti 67273.
- matematika/rand/v2: „ChaCha8“ и PCG dabar įdiekite sąsają kodavimas.dvejetainis priedas.
neto
Klausyk Condig dabar pagal numatytuosius nustatymus naudoja MPTCP sistemose, kuriose jis palaikomas (šiuo metu tik Linux).
IP dabar įdiegia sąsają kodavimas.Teksto priedas.
net/http
Apribojimas pasikeitė transportas į gautus 1xx informacinius atsakymus atsakant į užklausą. Anksčiau tai sustabdydavo užklausą ir grąžindavo klaidą gavus daugiau nei 5 1xx atsakymus. Dabar tai grąžina klaidą tik tuo atveju, jei bendras visų 1xx atsakymų dydis viršija konfigūracijos nustatymą Transport.MaxResponseHeaderBytes.
Taip pat, kai užklausa turi sekimo kabliuką net/http/httptrace.ClientTrace.Got1xxResponse, dabar bendras atsakymų skaičius 1xx neribojamas. „Got1xxResponse“ kabliukas gali grąžinti klaidą, kad sustabdytų užklausą.
transportas и serverio dabar turi HTTP2 lauką, leidžiantį konfigūruoti HTTP/2 protokolo nustatymus.
Nauji laukai Serveris.Protokolai и Transportas.Protokolai yra paprastas būdas konfigūruoti, kuriuos HTTP protokolus naudoja serveris arba klientas.
Serveris ir klientas gali būti sukonfigūruoti palaikyti nešifruotus HTTP/2 ryšius.
Kai Serveris.Protokolai yra UnencrypterHTTP2, serveris priims HTTP/2 ryšius nešifruotuose prievaduose. Serveris gali priimti ir HTTP/1, ir nešifruotą HTTP/2 tame pačiame prievade.
Kai Transportas.Protokolai yra UnencryptedHTTP2 ir nėra HTTP1, transportavimas adresams naudos nešifruotą HTTP/2 http://. Jei transportavimas sukonfigūruotas naudoti ir HTTP/1, ir nešifruotą HTTP/2, jis naudos HTTP/1.
Nešifruoto HTTP/2 palaikymas naudoja „HTTP/2 with Forward-Learning“ (RFC 9113, 3.3 skyrius). Nebenaudojama antraštė „Upgrade: h2c“ nepalaikoma.
net/netip
Adr, AdrPort и Prefiksas dabar įdiegti sąsajas kodavimas.dvejetainis priedas и kodavimas.Teksto priedas.
tinklas/url
URL adresas dabar taip pat įdiegia sąsają kodavimas.dvejetainis priedas.
os / vartotojas
Sistemoje Windows dabartinis dabar gali būti naudojamas Windows Nano Server. Diegimas buvo atnaujintas, kad nebūtų naudojamos funkcijos iš NetApi32 bibliotekos, kurios trūksta Nano Server.
Sistemoje Windows dabartinis, Peržvalgos и LookupId dabar palaiko šias integruotas vartotojo paslaugų paskyras:
- NT INSTITUCIJŲ SISTEMA
- NT INSTITUCIJOS VIETINĖ PASLAUGA
- NT INSTITUCIJŲ TINKLO PASLAUGOS
Sistemoje Windows dabartinis buvo žymiai pagreitintas, kai dabartinis vartotojas prisijungia prie lėto domeno, o tai yra įprasta daugeliui įmonių vartotojų. Naujojo diegimo našumas dabar yra milisekundžių tvarka, palyginti su ankstesniu diegimu, kuris gali užtrukti kelias sekundes ar net minutes.
Sistemoje Windows dabartinis dabar grąžina proceso savininko vartotoją, kai dabartinė gija apsimetinėja kitu vartotoju. Anksčiau tai grąžino klaidą.
Regexp
Regexp dabar įdiegia sąsają kodavimas.TextAdapter.
Runtime
Funkcija GOROOT dabar nebenaudojamas. Naujesnėse aplinkose turėtumėte naudoti sistemos kelią, kad nustatytumėte „go“ dvejetainį elementą, ir naudoti go env GOROOT, kad nustatytų GOROOT.
stygos
Pakuotė stygos prideda keletą funkcijų darbui su iteratoriais:
- Linijos Grąžina iteratorių eilutėje, atskirtoje naujomis eilutėmis.
- SplitSeq grąžina iteratorių visoms eilutės poeilėms, atskirtoms skyrikliu.
- SplitAfterSeq grąžina iteratorių per eilutės eilutes, išskaidomas po kiekvieno skyriklio atsiradimo.
- LaukaiSeq grąžina iteratorių virš eilutės poeilučių aplink tarpų simbolių sekas, kaip apibrėžtaunikodas.IsSpace
- FieldsFuncSeq Grąžina iteratorių per eilučių eilutes aplink Unicode kodo taškų sekas, kurios atitinka predikatą.
sync
Vykdymas sync.map buvo pakeistas siekiant pagerinti našumą, ypač dėl žodyno pakeitimų. Pavyzdžiui, nesuderinto rinkinio pakeitimo ginčas yra mažiau tikėtinas dideliuose žodynuose ir nebereikia kaupti laiko, kad būtų pasiekta maža ginčo žodyno apkrova.
Jei kyla problemų, kūrimo metu nustatykite GOEXPERIMENT=nosynchashtriemap, kad grįžtumėte į seną diegimą ir prašome užpildykite problemos formą.
bandymai
Nauji metodai T.Kontekstas и B.Kontekstas grąžinti kontekstą, kuris atmetamas pasibaigus bandymui ir prieš atliekant bandymo valymo funkcijas.
Nauji metodai T.Chdir и B.Chdir galima naudoti norint pakeisti darbo katalogą testo ar etalono metu.
tekstas/šablonas
Šablonai dabar palaiko diapazoną per funkciją ir diapazoną virš funkcionalumo.
laikas
Laikas dabar diegia sąsajas kodavimas.dvejetainis priedas и kodavimas.Teksto priedas.
uostai
Linux
Kaip tai buvo paskelbė Remiantis „Go 1.23“ laidos pastabomis, „Go 1.24“ reikalinga „Linux“ branduolio versija 3.2 arba naujesnė.
Darvinas
„Go 1.24“ yra paskutinė versija, kuri veiks „macOS 11 Big Sur“. „Go 1.25“ reikės „macOS 12 Monterey“ arba naujesnės versijos.
WebAssembly
Go:wasmexport kompiliatoriaus direktyva buvo įtraukta į Go programas, kad būtų galima eksportuoti funkcijas į WebAssembly pagrindinį kompiuterį.
„WebAssembly System Interface Preview 1“ (GOOS=wasip1 GOARCH=wasm) „Go 1.24“ palaiko „Go“ programos kūrimą kaip reaktorius/biblioteka nurodydami kūrimo vėliavėlę -buildmode=c-shared.
Dabar kaip argumentų arba rezultatų tipai leidžiami daugiau tipų go:wasmimport funkcijoms. Visų pirma leidžiami bool, string, uintptr ir rodyklės į tam tikrus tipus (žr dokumentacija), kartu su 32 bitų ir 64 bitų sveikųjų skaičių ir slankiojo kablelio tipais bei nesaugiais žymekliais, kurie jau yra leidžiami. Šie tipai taip pat leidžiami kaip argumentų arba rezultatų tipai go:wasmexport funkcijoms.
WebAssembly palaikymo failai buvo perkelti į lib/wasm iš misc/wasm.
Pradinis atminties plotas yra žymiai sumažintas, ypač mažoms WebAssembly programoms.
Windows
32 bitų langų / rankos prievadas (GOOS = langai GOARCH = rankena) buvo pažymėtas kaip sugadintas. Išsamią informaciją rasite # 70705
Šaltinis: linux.org.ru
