Versioni e re e Go, numri 1.24, del në gjashtë muaj pas Go 1.23. Shumica e ndryshimeve janë në implementimin e kitëve të veglave, runtime dhe biblioteka. Si gjithmonë, lëshimi siguron premtimin e kompatibilitetit Go 1. Zhvilluesit e gjuhës presin që pothuajse të gjitha programet Go të vazhdojnë të kompilohet dhe funksionojnë si më parë.
Ndryshimet në gjuhë
Go 1.24 tani mbështet plotësisht aliaset e tipave të përgjithshme: një alias tipi mund të jetë parametritizuar si një tip i shpallur. Detajet në specifikimin e gjuhës. Aktualisht, mundësia mund të çaktivizohet duke vendosur GOEXPERIMENT=noaliastypeparams; megjithatë, opsioni aliastypeparams do të hiqet në Go 1.25.
Mjetet
Komanda go
Modulat go tani mund të ndjekin varësitë ekzekutues duke përdorur direktivën tool në go.mod. Kjo heq nevojën për zgjidhjen e mëparshme për të shtuar veglat si importet e zbrazëta në skedarin, zakonisht të quajtur “tools.go”. Komanda go tool tani mund të ekzekutojë këto vegla përveç veglave të ofruara së bashku me Go. Më shumë informacion mund të shihet në dokumentacionin.
Flag i ri -tool për go get çon në shtimin e direktivës së veglës në modul aktual për paketat e specifikuara përveç shtimit të direktivave të kërkesës.
E re metapatterni tool reflekton të gjitha veglat në modul aktual. Kjo mund të përdoret për të përditësuar të gjitha ato përmes go get tool ose për t'i instaluar ato në direktorinë tuaj GOBIN përmes go install tool.
Skedarët ekzekutues të krijuar përmes go run dhe sjellja e re e go tool tani ruhen në cache-në e ndërtimit Go. Kjo e bën ekzekutimin e përsëritur më efektiv përmes një cache më të madh. #69290.
Komandat go build dhe go install tani pranojnë flag -json, i cili raporton daljen dhe gabimet e ndërtimit si një dalje të strukturuar JSON në dalje standarde. Detajet e formatit mund të shihen në go help buildjson.
Për më tepër, go test -json tani raporton daljen dhe gabimet e ndërtimit në JSON, së bashku me JSON-in e rezultatit të testimit. Ata mund të dallohen sipas tipeve të reja të Veprimit, por nëse ata shkaktojnë probleme në sistemin e integrimit të testeve, mund të ktheheni në daljen tekstuale të ndërtimit përmes konfigurimit GODEBUG gotestjsonbuildtext=1.
Variabli i ri i mjedisit GOAUTH ofron një mënyrë të përshtatshme për të autorizuar tërheqjet private të moduleve. Mund të shihni detajet në go help goauth.
Komanda go build tani mund të instalojë versionin e modulit kryesor në binarin e kompaktuar, bazuar në etiketën dhe/ose komitin e sistemit të kontrollit të versioneve. Suffix +dirty do të shtohet nëse ka ndryshime që nuk janë komituar. Mund të përdorni flamurin -buildvcs=false për të eliminuar informacionin e kontrollit të versioneve nga binari.
E re konfigurimi GODEBUG toolchaintrace=1 tani mund të përdoret për të ndjekur procesin e zgjedhjes së toolchain në ekipin go.
Cgo
Cgo mbështet annotime të reja për funksionet C për të përmirësuar performancën e kohës ekzekutimi. #cgo noescape cFunctionName i thotë kompilatorit që kujtesa e kaluar në funksionin C cFunctionName nuk ikën. #cgo nocallback cFunctionName i thotë kompilatorit se funksioni C cFunctionName nuk thërret kurrë funksione të Go. Informacione më të detajuara mund të shihni në dokumentacionin cgo.
Cgo aktualisht refuzon të kompilojë thirrjet e funksioneve C që kanë disa shpallje të papajtueshme. Për shembull, nëse f shpallet si void f(int) dhe void f(double), cgo do të raportojë një gabim në vend që të gjenerojë një sekuencë të gabuar thirrjeje f(0). E reja në këtë lëshim është përmirësimi në zb discovery e kësaj gjendjeje gabimi, kur shpalljet e papajtueshme shfaqen në skedarë të ndryshëm. #67699.
Objdump
Instrumenti objdump tani mbështet desassemblimin në 64-bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) dhe S390X (GOARCH=s390x).
Vet
Analizatori i ri tests raporton gabime të zakonshme në shpalljet e testeve, fuzzers, benchmarks dhe shembuj në paketat e testeve, të tilla si emra të formuluar gabim, nënshkrime të gabuara ose shembuj që dokumentojnë identifikues që nuk ekzistojnë. Disa prej këtyre gabimeve mund të çojnë në dështimin e testeve.
Analizatori ekzistues printf tani raporton diagnostikë për thirrjet e formës fmt.Printf(s), ku s është një varg me format jo konstant, pa argumente të tjera. Të tilla thirrje janë pothuajse gjithmonë një gabim, sepse vlera s mund të përmbajë simbolin %; përdorni në vend të tij fmt.Print. 60529. Ky kontroll ka tendencë të bëjë zbulesa në kodin ekzistues dhe për këtë arsye aplikohet vetëm kur versioni i gjuhës (siç është përcaktuar nga direktiva go e skedarit go.mod ose komentet `//go:build) është të paktën Go 1.24, për të shmangur dështimet e vazhdueshme të integrimit gjatë përditësimit në toolchain Go 1.24.
Analizatori ekzistues buildtag tani raporton diagnostikë kur ka një gabim kufizimi i ndërtimit të versionit të lartë Shkoni në direktivën //go:build. Për shembull, //go:build go1.23.1 i referohet një versioni të caktuar; në vend të kësaj, përdorni //go:build go1.23. #64127.
Analizatori ekzistues copylock tani raporton diagnostikë kur një variabël, e shpallur në një cikël të trefishtë “for”, siç është for i := iter(); done(i); i = next(i) { … }, përmban sync.Locker, siç është sync.Mutex. Go 1.22 ndryshoi sjelljen e këtyre cikleve në krijimin e një variabël të re për çdo iteracion, duke kopjuar vlerat nga iteracioni i mëparshëm; kjo kopjim nuk është i sigurt për lock. #66387.
GOCACHEPROG
Binar i brendshëm cmd/go dhe mekanizmi i caching të testeve tani mund të janë realizuar nga procese dytësore që zbatojnë protokollin JSON midis mjetit cmd/go dhe procesit dytësor, të quajtur variabla e mjedisit GOCACHEPROG. Në të kaluarën, kjo ishte për GOEXPERIMENT. Detajet e protokollit mund të shikohen në dokumentacionin.
Koha e ekzekutimit
Përmirësime të shumta të performancës në runtime reduktuan ngarkesat mbi CPU me 2-3% në mesatare në një grup përfaqësues benchmarks. Rezultatet mund të varijnë në varësi të aplikacionit. Këto përmirësime përfshijnë një implementim të ri të integruar të map të bazuar në Tabela Suedeze, një ndarje më të efektshme të memories për objekte të vogla dhe një implementim të ri të brendshëm të runtime mutex.
Implementimi i ri i integruar i map dhe mutex-i i ri i brendshëm mund të çaktivizohen me konfigurimet GOEXPERIMENT=noswissmap dhe GOEXPERIMENT=nospinbitmutex gjatë ndërtimit përkatësisht.
Kompilatori
Kompilatori tashmë ndalonte përcaktimin e metodave të reja me lloje pranuese, të cilat ishin gjeneruar cgo, por ishte e mundur të anashkalohej ky kufizim përmes alias llojit. Go 1.24 tani gjithmonë raporton një gabim nëse pranuese identifikon një lloj të gjeneruar cgo, drejtpërdrejt ose tërthor (përmes aliasit të tipit).
Linkeri
Linkeri tani gjeneron një identifikues ndërtimi GNU (shënimi ELF NT_GNU_BUILD_ID) në platformat ELF dhe UUID (komanda ngarkimi Mach-O LC_UUID) në macOS si parazgjedhje. Identifikuesi i ndërtimit ose UUID del nga identifikuesi i ndërtimit Go. Kjo mund të fiket me flagun e linker-it -B none, ose të mbivendoset me flagun e linker-it -B 0xNNNN me një vlerë heksakor të caktuar nga përdoruesi.
Rrotullimi
Siç është theksuar në shënimet e lëshimit Go 1.22, Go 1.24 tani tani kërkon për përmirësim Go 1.22.6 ose më vonë. Zhvilluesit presin që Go 1.26 do të kërkojë për të përmirësuar një lëshim të përpikë Go 1.24 ose më vonë.
Biblioteka standart
Qasje e kufizuar në sistemin e skedarëve nëpërmjet direktorisë
Lloji i ri os.Root ofron mundësinë për të kryer operacione në sistemin e skedarëve brenda një direktorie të caktuar.
Funksioni os.OpenRoot hap direktorinë dhe kthen os.Root. Metodat në os.Root punojnë në këtë direktori dhe nuk lejojnë që rrugët të referohen në lokacione jashtë direktorisë, duke përfshirë ato që ndjekin lidhjet simbolike jashtë direktorisë. Metodat në os.Root pasqyrojnë shumicën e operacioneve të sistemit të skedarëve të disponueshme në paketën os, duke përfshirë, për shembull, os.Root.Open, os.Root.Create, os.Root.Mkdir dhe os.Root.Stat.
Funksioni i ri i benchmark-ut
Benchmark-ët tani mund të përdorin një metodë më të shpejtë dhe më pak të ndjeshme ndaj gabimeve testing.B.Loop për të kryer iteracione benchmark-u si for b.Loop() { … } në vend të strukturave tipike ciklike që përfshijnë b.N si for range b.N. Kjo ofron dy përfitime të rëndësishme:
- Funksioni i benchmark-ut ekzekutohet saktësisht një herë për çdo -count, duke qenë se hapat e shtrirjes dhe pastrimit të kushtueshëm ekzekutohen vetëm një herë.
- Parametrat e thirrjes së funksionit dhe rezultatet vazhdojnë të ekzistojnë, duke e parandaluar kompajlerin nga optimizimi i plotë i trupit të ciklit.
Funksionet e përmirësuara të pastrimit
Funksioni i ri runtime.AddCleanup është një mekanizëm përfundimtar, i cili është më fleksibël, më efikas dhe më pak i ndjeshëm ndaj gabimeve se runtime.SetFinalizer. AddCleanup lidh një funksion pastrimi me një objekt, i cili do të ekzekutohet sapo objekti të bëhet i paqasshëm. Megjithatë, ndryshe nga SetFinalizer, disa pastrime mund të lidhën me një objekt të vetëm, pastrimet mund të lidhen me treguesit e brendshëm, pastrimet zakonisht nuk shkaktojnë rrjedhje kur objektet formojnë një rreth, dhe pastrimet nuk shtyjnë çlirimin e objektit ose objekteve që ai referon. Kodi i ri duhet të preferojë AddCleanup mbi SetFinalizer.
Paketi i ri weak
Paketi i ri weak ofron tregues të dobët.
Treguesit e dobët janë një primitiv i niveleve të ulëta, i ofruar për të krijuar struktura që shfrytëzojnë efektivisht memorien, siç janë fjalorët e dobët për të përputhur vlerat, fjalorët e kanonizimit për gjithçka që nuk mbulohet nga paketa unique, dhe lloje të ndryshme të caches. Për të mbështetur këto raste përdorimi, kjo version gjithashtu ofron runtime.AddCleanup dhe maphash.Comparable.
Paketi i ri crypto/mlkem
Paketi i ri crypto/mlkem implementon ML-KEM-768 dhe ML-KEM-1024.
ML-KEM është një mekanizëm exchange kluçesh post-kantor, i njohur më parë si Kyber dhe specifikuar në FIPS 203.
Paketa e re crypto/hkdf, crypto/pbkdf2 dhe crypto/sha3
Paketi i ri crypto/hkdf implementon një funksion të daljes së çelësit të bazuar në HMAC “Extract-and-Expand” HKDF, siç përcaktohet në RFC 5869.
Paketi i ri crypto/pbkdf2 implementon një funksion të daljes së çelësit të bazuar në fjalëkalim PBKDF2, siç përcaktohet në Eu2.sof bg sofia telepoint şəkil 5.
Paketi i ri Eu2.sof bg sofia telepoint şəkil 4 Eu2.sof bg sofia telepoint şəkil 1 Eu2.sof bg sofia telepoint şəkil 3.
Eu2.sof bg sofia telepoint şəkil 2
Sofiya
Ky version përfshin një grup të ri mekanizmash për të siguruar përputhshmërinë me FIPS 140-3.
Moduli kriptografik Go është një grup paketash të brendshme të bibliotekës standarde, të cilat përdoren në mënyrë transparente për të implementuar algoritmet e miratuara FIPS 140-3. Aplikacionet nuk kërkojnë ndryshime për të përdorur modul kriptografik Go për algoritmet e miratuara.
Variabla e re ambienti GOFIPS140 mund të përdoret për të zgjedhur versionin e modulit kriptografik Go për t'u përdorur në ndërtim. E reja konfigurimi GODEBUG fips140 mund të përdoret për të aktivizuar modalitetin FIPS 140-3 gjatë ekzekutimit.
Go 1.24 përfshin modul kriptografik Go versioni v1.0.0, i cili aktualisht po testohet me laboratorin e akredituar CMVP.
Paketi eksperimental i ri testing/synctest
Paketi eksperimental i ri testing/synctest siguron mbështetje për testimin e kodit konkurrues.
- Funksioni synctest.Run ekzekuton një grup goroutines në një “bubullimë” të izoluar. Në bubullimë funksionet e paketës time puna mbi orare false.
- Funksionet synctest.Wait pret kur të gjitha goroutines të bllokohen në bubullimën aktuale.
Detajet mund të shihen në dokumentacionin e paketës.
Paketa synctest është eksperimmentale dhe duhet të aktivizohet duke vendosur GOEXPERIMENT=synctest. API e paketës mund të ndryshojë në versionet e ardhshme. Në #67434 mund të shihen më shumë detaje dhe të jepet feedback.
Ndryshime të vogla në bibliotekën
archive
Implementimet (*Writer.AddFS) në archive/zip dhe archive/tar tani shkruajnë titullin e direktoreve për direktorinë e zbrazët.
bytes
Paketa bytes shton disa funksione që punojnë me iteratorët:
- Lines kthen një iterator mbi rreshtat e ndarë nga linja e re në një slice byte.
- SplitSeq kthen një iterator mbi të gjitha sub-slice-të e një slice byte, të ndara nga separator.
- SplitAfterSeq ktheniterator për nënprerjet e slice-it të bajtëve, i ndarë pas çdo shfaqjeje të separatorit.
- FieldsSeq ktheniterator për nënprerjet e slice-it të bajtëve rreth sekuencave të karaktereve të hapësirës, siç definohet unicode.IsSpace
- FieldsFuncSeq ktheniterator për nënprerjet e slice-it të bajtëve rreth sekuencave të pikave koduese të Unicode-it që përmbushin predikatin.
crypto/aes
Vlera e kthyer NewChipher nuk implementon më metodat NewCTR, NewGCM, NewCBCEncrypter dhe NewCBCDecrypter. Këto metoda ishin të padokumentuara dhe nuk ishin të disponueshme në të gjitha arkitekturat. Tani vlera Block duhet të kalojë drejtpërdrejt në funksionet përkatëse crypto/cipher. Aktualisht, crypto/cipher ende verifikon këto metoda në vlerat Block, megjithëse ato tani nuk mbështeten më nga biblioteka standarde.
crypto/cipher
Funksioni i ri NewGCMWithRandomNonce false, nëse elementi që do të zëvendësohet është AEAD, e cila implementon AES-GCM, duke gjeneruar një numër të rastësishëm njëherësh gjatë Seal dhe duke e shtuar atë në fillim të tekstit të enkriptuar.
Implementimi Stream, e kthyer NewCTR kur përdoret me crypto/aes tani është shumë më e shpejtë në amd64 dhe arm64.
NewOFB, NewCFBEncrypter dhe NewCFBDecrypter tani janë shpallur të përjetshme. Modet OFB dhe CFB janë jo-autenticë, duke lejuar në përgjithësi që sulmet aktive të manipulojnë dhe të rikuperojnë tekstin e hapur. Aplikacioneve u rekomandohet të përdorin AEAD në vend. Nëse moda jo-aktuale Stream është e nevojshme, mund të përdoret NewCTR në vend.
crypto/ecdsa
PrivateKey.Sign tani krijon një nënshkrim deterministik në përputhje me RFC 6979, nëse burimi i rastësisë është nil.
crypto/md5
Vlera e kthyer md5.New, tani gjithashtu implementon ndërfaqen encoding.BinaryAppender.
crypto/rand
Funksioni Lexo tani garanton papastrim. Nëse Read has një gabim gjatë leximit Reader, programi do të mbyllet përgjithmonë. Vini re se Reader-i i parazgjedhur është dokumentuar të funksionojë gjithmonë me sukses, prandaj ky ndryshim duhet të prekur vetëm ato programe që tejkalojnë variablin Reader. Një përjashtim janë kernelët Linux deri në versionin 3.17, ku Reader-i i parazgjedhur ende hap /dev/urandom dhe mund të dështojë.
Në Linux 6.11 dhe më vonë, Reader tani përdor thirrjen sistemike getrandom përmes vDSO. Kjo është shumë më e shpejtë, zakonisht për leximet e vogla.
Në OpenBSD, Reader tani përdor arc4random_buf(3).
Funksioni i ri Text tani mund të gjenerojë vargje teksti të rastësishme të sigurta nga kriptografia.
crypto/rsa
GenerateKey tani tani kthen një gabim nëse kërkohet një çelës me gjatësi më pak se 1024 bit. Të gjitha metodat Sign, Verify, Encrypt dhe Decrypt tani kthejnë një gabim nëse përdoren me një çelës me madhësi më pak se 1024 bit. Çelësat e tillë nuk janë të sigurt dhe nuk duhet të përdoren. Konfigurimi GODEBUG rsa1024min=0 rikthen sjelljen e vjetër, por zhvilluesit e Go rekomandojnë ta bëni këtë vetëm kur është e nevojshme dhe vetëm në teste, për shembull duke shtuar rreshtin //go:debug rsa1024min=0 në skedarin e testit. I ri është GenerateKey ofron një çelës testimi standard 2024-bit të lehtë për t'u përdorur.
Tani është e sigurt dhe më efikase të thërrasë PrivateKey.Precompute në PrivateKey.Validate. Precompute tani është më i shpejtë në prani të PrecomputedValues, për shembull kur nxirren çelësat nga JSON.
Pakoja tani refuzon më shumë çelësa të gabuar, edhe kur Validate nuk thirret, dhe GenerateKey tani mund të kthejë gabime të reja për burimet e thyer të rastësisë. Polat Primes dhe Precomputed struktura PrivateKey tani përdoren dhe validohen edhe kur disa vlera mungojnë. Janë bërë gjithashtu ndryshime në crypto/x509 për analizimin dhe nxjerrjen e çelësave RSA, që do të përshkruhen më poshtë.
SignPKCS1v15 dhe VerifyPKCS1v15 tani mbështesin SHA-512/224, SHA-512/256 dhe SHA-3.
GenerateKey tani përdor një metodë pak më të ndryshme për gjenerimin e eksponentit privat (funksioni i Carmichael në vend të funksionit të Eulerit). Aplikacione të rralla që rindërtojnë çelësat vetëm nga numrat primo mund të krijojnë rezultate të ndryshme, por të kompatibël.
Operacionet mbi çelësat publikë dhe privatë tani janë deri në dy herë më të shpejta në wasm.
crypto/sha*
- crypto/sha1: vlera e kthyer sha1.New tani gjithashtu implementon ndërfaqen encoding.BinaryAppender.
- crypto/sha256: vlerat e kthyer sha256.New dhe sha256.New224 tani gjithashtu implementon ndërfaqen encoding.BinaryAppender.
- crypto/sha512: vlerat e kthyer sha512.New, sha512.New384, sha512.New512_224 dhe sha512.New512_256, tani gjithashtu implementon ndërfaqen encoding.BinaryAppender.
crypto/subtle
Funksioni i ri WithDataIndependentTiming lejon përdoruesit të ekzekutojë funksione me funksione të përfshira specifike për arkitekturën, të cilat garantojnë invariancën e disa instruksioneve në lidhje me kohën e vlerës së të dhënave. Kjo mund të përdoret për të siguruar që kodi i krijuar për të punuar në kohë konstante nuk është optimizuar nga funksionet e nivelit të procesorit në një mënyrë që funksionon në kohë ndryshimi. Aktualisht, WithDataIndependentTiming përdor bitin PSTATE.DIT në arm64 dhe nuk bën asgjë në të gjitha arkitekturat e tjera. Konfigurimi GODEBUG dataindependenttiming=1 aktivizon modalitetin DIT për të gjithë programin Go.
Përfundimi XORBytes duhet të mbulojë plotësisht ose aspak me hyrjen. Më parë, sjellja ishte e paqartë në mënyrë tjetër, ndërsa tani XORBytes do të panikojë.
crypto/tls
Serveri TLS tani mbështet Encrypted Client Hello (ECH). Kjo mundësi mund të aktivizohet duke plotësuar fushën Config.EncryptedClientHelloKeys.
Mekanizmi i ri i këmbimit të çelësit post-kvant X25519MLKEM768 tani mbështetet dhe është aktivizuar si parazgjedhje kur Config.CurvePreferences është nil. Konfigurimi GODEBUG tlsmlkem=0 kthen defoltin.
Mbështetja për këmbimin e çelësit eksperimental X25519Kyber768Draft00 është hequr.
Rendi i këmbimit të çelësit tani trajtohet plotësisht nga paketa crypto/tls. Rendi Config.CurvePreferences tani injorohet, dhe përmbajtja përdoret vetëm për të përcaktuar se cilat këmbime çelësi të aktivizohen kur fusha është e plotësuar.
Fusha e re ClientHelloInfo.Extensions liston identifikatorët e zgjerimeve të marra në mesazhin Client Hello. Kjo mund të jetë e dobishme për të marrë gjurmët e klientëve TLS.
crypto/x509
Konfigurimi GODEBUG x509sha1 është hequr. Certficicate.Verify nuk mbështet më nënshkrimet e bazuara në SHA-1.
OID tani implementon ndërfaqet encoding.BinaryAppender dhe encoding.TextAppender.
Fusha e defoltit të politikave të certifikatës është ndryshuar nga Certificate.PolicyIdentifiers në Certificate.Policies. Gjatë analizës së certifikatave, të dy fushat do të plotësohen, por kur krijohet politika e certifikatave, ato do të merren nga fusha Certificate.Policies në vend të Certificate.PolicyIdentifiers. Ky ndryshim mund të kthehet duke përdorur GODEBUG x509usepolicies=0.
CreateCertificate tani do të gjenerojë një numër serial duke përdorur një metodë të përputhshme me RFC 5280 kur dërgon modelin përmes fushës Certificate.SerialNumber nil, në vend të dështimit.
Certificate.Verify tani mbështet validimin e politikës, siç është përcaktuar në RFC 5280 dhe RFC 9618. Fusha e re VerifyOptions.CertificatePolicies mund të vendoset në një grup të pranueshëm politikash OIDsVetëm zinxhirët e certifikatave me grafika të vlefshme politike do të kthehen nga Certificate.Verify.
MarshalPKCS8PrivateKey tani kthen një gabim në vend të nxjerrjes së një çelësi RSA të gabuar. (MarshalPKCS1PrivateKey nuk ka kthim gabimi dhe sjellja e tij me çelësa të gabuar të siguruar vazhdon të jetë e pacaktuar.)
ParsePKCS1PrivateKey dhe ParsePKCS8PrivateKey tani përdorin dhe validuojnë vlerat e koduara CRT, prandaj mund të refuzojnë çelësat RSA të gabuara që më parë ishin pranuar. Përdorimi i parametrave GODEBUG x509rsacrt=0 kthen në rinumërimin e vlerave CRT.
debug/elf
Paketa debug/elf shton mbështetje për trajtimin e versioneve të simboleve në skedarët dinamikë ELF (Executable and Linkable Format). Metoda e re File.DynamicVersions kthen një listë versionesh dinamike, të përcaktuara në skedarin ELF. Metoda e re File.DynamicVersionNeeds kthen një listë versionesh dinamike që kërkohen nga ky skedar ELF, të cilat janë të përcaktuara në objekte të tjera ELF. Përfundimisht, fushat e reja Symbol.HasVersion dhe Symbol.VersionIndex tregohet versioni i simbolit.
encoding
Dy ndërfaqe të reja TextAppender dhe BinaryAppender u prezantuan për të shtuar një përfaqësim tekstual ose binar të objektit në një prerje bytesh. Këto ndërfaqe ofrojnë të njëjtën funksionalitet si TextMarshaler dhe BinaryMarshaler, por në vend të alokimit të një prerje të re çdo herë, ato shtojnë të dhënat direkt në prerjen ekzistuese. Këto ndërfaqe tani janë zbatuar nga llojet e bibliotekës standarde që tashmë zbatojnë TextMarshaler dhe/ose BinaryMarshaler.
encoding/json
Kur ndërtohet fushë strukture me opsionin e ri omitzero në etiketën e fushës, ajo do të çohet poshtë nëse vlera e saj është zero. Nëse lloji i fushës ka metodën IsZero() bool, ajo do të përdoret për të përcaktuar nëse vlera është zero. Ndryshe, vlera do të jetë zero nëse është vlera zero për llojin e tij. Etiqueta e fushës omitzero është më e pastër dhe më pak e prirur ndaj gabimeve se omitempty, kur qëllimi është të hiqen vlerat zero. Në veçanti, ndryshe nga omitempty, omitzero hiqet vlerat zero time.Time e cila është një burim i zakonshëm i problemeve.
Nëse të dyja omitempty dhe omitzero janë të përcaktuara, fusha do të hiqet nëse vlera është e zbrazët ose zero (ose menjëherë së bashku).
UnmarshalTypeError.Field tani përfshin struktura të ndërtuara për të ofruar mesazhe më të detajuara gabimi.
go/types
Të gjitha strukturat e dhënave go/types, të cilat zbulojnë sekuencat e çiftëve të metodave, si Len() int dhe At(int) T, tani gjithashtu kanë metoda që kthejnë iteratues, duke lejuar që kodi i tillë të jetë më i thjeshtë:
params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
Për këtë:
for param := range fn.Signature().Params().Variables() { use(param) }
Metodat: Interface.EmbeddedTypes Interface.ExplicitMethods Interface.Methods MethodSet.Methods Named.Methods Scope.Children Struct.Fields Tuple.Variables TypeList.Types TypeParamList.TypeParams Union.Terms
hash/*
- hash/adler32: vlera e kthyer E re, tani gjithashtu implementon ndërfaqen encoding.BinaryAppender
- hash/crc32: vlerat e kthyer E re dhe NewIEEE, tani gjithashtu implementon ndërfaqen encoding.BinaryAppender
- hash/crc64: vlera e kthyer E re, tani gjithashtu implementon ndërfaqen encoding.BinaryAppender
- hash/fnv: vlerat e kthyer New32 New32a New64 New64a New128 dhe New128a, tani gjithashtu implementon ndërfaqen encoding.BinaryAppender
- hash/maphash: funksione të reja Comparable dhe WriteComparable mund të llogarisin një hash për çdo vlerë që është e krahasueshme. Kjo lejon që të hashohen gjëra kudo që mund të përdoren si çelës të fjalorëve Go.
log/slog
E re DiscardHandler është një trajtues që nuk përfshihet kurrë dhe gjithmonë hedh daljen e tij.
Niveli dhe LevelVar tani implementojnë ndërfaqen encoding.TextAppender.
math/*
- math/big: Float, Int dhe Rat tani implementojnë ndërfaqen encoding.TextAppender.
- math/rand: thirrjet e funksionit të lartë që janë dekurajuar Seed nuk kanë ndonjë efekt. Për të rikthyer sjelljen e mëparshme, mund të përdorni konfigurimit GODEBUG randseednop=0. Më shumë kontekst në propozimi 67273.
- math/rand/v2: ChaCha8 dhe PCG tani implementojnë ndërfaqen encoding.BinaryAppender.
net
ListenCondig tani përdor MPTCP si parazgjedhje në sistemet ku mbështetet (deri tani vetëm Linux).
IP tani implementon ndërfaqen encoding.TextAppender.
net/http
Ka ndryshuar kufizimi Transport për përgjigjet informative 1xx në përgjigje të kërkesës. Më parë, kjo ndalte kërkesën dhe ktheu një gabim pas marrjes së më shumë se 5 përgjigjeve 1xx. Tani, kjo kthen një gabim vetëm nëse e gjithë madhësia e të gjitha përgjigjeve 1xx tejkalon konfigurimin Transport.MaxResponseHeaderBytes.
Për më tepër, kur kërkesa ka një hije për gjurmim net/http/httptrace.ClientTrace.Got1xxResponse, tani nuk ka kufizim në numrin e përgjigjeve totale 1xx. Hija Got1xxResponse mund të kthejë një gabim për të ndaluar kërkesën.
Transport dhe Server tani kanë një fushë HTTP2, e cila lejon konfigurimin e cilësimeve të protokollit HTTP/2.
Fushat e reja Server.Protocols dhe Transport.Protocols ofrojnë një mënyrë të thjeshtë për të konfiguruar se cilat protokolle HTTP serveri ose klienti përdorin.
Serveri dhe klienti mund të konfigurohen për të mbështetur lidhjet e pa enkriptuara HTTP/2.
Kur Server.Protocols ka në përmbajtjen UnencrypterHTTP2, serveri do të pranojë lidhjet HTTP/2 në porte të pa enkriptuara. Serveri mund të pranojë menjëherë HTTP/1 dhe HTTP/2 të pa enkriptuar në të njëjtin port.
Kur Transport.Protocols ka në përmbajtjen UnencryptedHTTP2 dhe nuk ka HTTP1, transporti do të përdorë HTTP/2 të pa enkriptuar për adresat http://. Nëse transporti është konfiguruar të përdorë menjëherë HTTP/1 dhe HTTP/2 të pa-enkriptuar, ai do të përdorë HTTP/1.
Mbështetje për HTTP/2 të pa-enkriptuar përdor ‘HTTP/2 me dijeni paraprake’ (RFC 9113, seksioni 3.3). Titulli i vjetruar “Upgrade: h2c” nuk mbështetet.
net/netip
Addr, AddrPort dhe Prefix tani implementojnë interfesat encoding.BinaryAppender dhe encoding.TextAppender.
net/url
URL tani gjithashtu implementon ndërfaqen encoding.BinaryAppender.
os/user
Në Windows Current tani mund të përdoret në Windows Nano Server. Implementimi është përditësuar për të shmangur përdorimin e funksioneve nga biblioteka NetApi32, e cila mungon në Nano Server.
Në Windows Current, Lookup dhe LookupId tani mbështesin llogaritë e shërbimit të integruar të përdoruesit:
- NT AUTHORITYSYSTEM
- NT AUTHORITYLOCAL SERVICE
- NT AUTHORITYNETWORK SERVICE
Në Windows Current është përshpejtuar ndjeshëm kur përdoruesi aktual është i lidhur me një domain të ngadalshëm, që është një rast i zakonshëm për shumë përdorues korporativë. Tani paraqitja e performancës së implementimit është në rendin e milisekondave, krahasuar me implementimin e mëparshëm, i cili mund të zgjaste disa sekonda, madje minuta, deri në përfundim.
Në Windows Current tani kthen përdoruesin pronar të procesit, kur trau aktual e paraqet veten si një përdorues tjetër. Më parë kjo ktheu një gabim.
regexp
Regexp tani implementon ndërfaqen encoding.TextAdapter.
runtime
Funksioni GOROOT tani është shpallur i vjetruar. Në kodin e ri duhet të preferohet përdorimi i rrugës sistemore për të përcaktuar binarin “go” dhe të përdoret go env GOROOT për të përcaktuar GOROOT.
strings
Paketa strings shton disa funksione për të punuar me iteratorët:
- Lines kthen një iterator mbi vargjet e ndara nga linjat e reja në një varg.
- SplitSeq kthen një iterator mbi të gjitha nënstringat e një vargu, të ndara nga separatorët.
- SplitAfterSeq kthen një iterator mbi nënstringat e vargut, të ndara pas çdo ndodhi të separatorit.
- FieldsSeq kthen një iterator mbi nënstringat e vargut rreth sekuencave të karaktereve të zbrazët, siç është përcaktuar.unicode.IsSpace
- FieldsFuncSeq kthen një iterator mbi nënstringat e vargut rreth sekuencave të kodit të Unicode, që plotësojnë predikatin.
sync
Implementimi sync.Map është modifikuar, duke përmirësuar performancën, sidomos për ndryshimet në fjalor. Për shembull, është më pak e mundshme të ketë përplasje të ndryshimeve të grupeve të palidhura në fjalorët e mëdhenj, dhe tani nuk kërkohet kohë e shtuar për të arritur në një fjalor me ngarkesë të ulët konfronti.
Nëse hasni ndonjë problem, vendosni GOEXPERIMENT=nosynchashtriemap gjatë ndërtimit për të kthyer në implementimin e vjetër dhe, ju lutem, mbushni formularin e problemit.
testimi
Metoda të reja T.Context dhe B.Context kthejnë kontekstin që anulohet pas përfundimit të provës dhe para ekzekutimit të funksioneve të pastrimit të provës.
Metoda të reja T.Chdir dhe B.Chdir mund të përdoren për të ndryshuar direktorinë e punës për periudhën e provës ose benchmark-ut.
text/template
Shabllonet tani mbështesin range-over-func dhe range-over-int.
time
Koha tani implementon ndërfaqet encoding.BinaryAppender dhe encoding.TextAppender.
Portat
Linux
Si ishte u shpall në shënimet e lëshimit të Go 1.23, Go 1.24 kërkon bërthamën Linux version 3.2 ose më vonë.
Darwin
Go 1.24 është lëshimi i fundit që do të funksionojë në macOS 11 Big Sur. Go 1.25 do të kërkojë macOS 12 Monterey ose më vonë.
WebAssembly
Direktiva e kompajlerit go:wasmexport është shtuar në programet Go për eksportimin e funksioneve në hostin WebAssembly.
Në WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 mbështet ndërtimin e programit Go si reactor/library nëpërmjet shënimit të flamurit të ndërtimit -buildmode=c-shared.
Më shumë lloje tani lejohet si lloj argumenti ose rezultati për funksionet go:wasmimport. Sidomos, bool, string, uintptr dhe tregues në lloje të caktuara janë të lejuara (detajet mund të shihni në dokumentacionin), së bashku me llojet e numrave të plotë 32-bit dhe 64-bit dhe të numrave me pikë të lëngshme, si dhe unsafe.Pointer, të cilat tashmë janë të lejuara. Këto lloje gjithashtu lejojnë si lloje argumenti ose rezultati për funksionet go:wasmexport.
Skedarët mbështetës për WebAssembly janë zhvendosur në lib/wasm nga misc/wasm.
Madhësia origjinale e memories është reduktuar ndjeshëm, veçanërisht për aplikacionet e vogla WebAssembly.
Windows
Porti 32-bit windows/arm (GOOS=windows GOARCH=arm) është shënuar si i thyer. Detajet në #70705
Burimi: linux.org.ru
