Go 1.24

Go 1.24

Shq release i ri i gjuhës Go, versioni 1.24, del pas gjashtë muajve Go 1.23. Shumica e ndryshimeve janë në implementimin e mjeteve, runtime dhe biblioteka. Si gjithmonë, ky version garanton premtimin e kompatibilitetit Go 1. Zhvilluesit e gjuhës presin që pothuajse të gjitha programet Go të vazhdojnë të kompilohet dhe të funksionojë si më parë.

Ndryshime në gjuhë

Go 1.24 tani mbështet plotësisht aliaset e përgjithshme të tipeve: aliasi i tipit mund të jetë parametrizuar si një tip i deklaruar. Detajet mund të gjenden në specifikimin e gjuhës. Për actualmente, mundësia mund të çaktivizohet duke vendosur GOEXPERIMENT=noaliastypeparams; megjithatë, opsioni aliastypeparams do të eliminohet në Go 1.25.

Mjetet

Ekipi go

Modulet go tani mund të ndjekin varësitë ekzekutues duke përdorur direktivën tool në go.mod. Kjo heq nevojën për një zgjidhje anësore të mëparshme për të shtuar mjete si importe bosh në skedarin, zakonisht të quajtur “tools.go”. Ekipi go tool tani mund të ekzekutojë këto mjete përveç mjeteve të ofruara me Go. Informacione më të sakta mund të shihen në dokumentacion.

Flagu i ri -tool për go get çon në shtimin e direktivës së mjetit në modul aktual për paketat e specifikuara, përveç shtimit të direktivave të kërkesave.

E re meta-shtesë tool i referohet të gjitha mjeteve 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ë drejtorynë tuaj GOBIN përmes go install tool.

Skedarët ekzekutivë 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ë të shpejtë për shkak të cache-it të rritur. #69290.

Komandat go build dhe go install tani pranojnë flamurin -json, i cili raporton daljet dhe gabimet e ndërtimit si një dalje të strukturuar JSON në standardin e daljes. Detajet e formatit mund të shihni në go help buildjson.

Për më tepër, go test -json tani raporton daljet dhe gabimet e ndërtimit në JSON, së bashku me rezultatin e testimit në JSON. Ato mund të dallohen nga tipet e reja të Veprimit, por nëse krijojnë probleme në sistemin e integrimit të testeve, mund të riktheheni në daljen tekstuale të ndërtimit përmes konfigurimit GODEBUG gotestjsonbuildtext=1.

Variabël e re e mjedisit GOAUTH ofron një mënyrë fleksibile për autentifikimin e tërheqjeve private të moduleve. Detajet mund të shihen në go help goauth.

Komanda go build tani instaluar versionin e modulit kryesor në binarin e kompiluar, duke u bazuar në etiketën dhe/ose komentin e sistemit të kontrollit të versions. Shtesa +dirty do të shtohet nëse ka ndryshime të pa komituara. Mund të përdorni flag -buildvcs=false për të lënë jashtë informacionin e kontrollit të versions nga binari.

E re konfigurimi GODEBUG toolchaintrace=1 tani mund të përdoret për të ndjekur procesin e zgjedhjes së toolchain në komandën go.

Cgo

Cgo mbështet annotime të reja për funksionet C për të përmirësuar performancën në kohë reale. #cgo noescape cFunctionName i thotë kompajlerit që memoria e kaluar në funksionin C cFunctionName nuk ikën. #cgo nocallback cFunctionName i thotë kompajlerit që funksioni C cFunctionName nuk thërret asnjë funksion Go prapa. Më shumë informacion mund të shihet në dokumentacionin cgo.

Cgo tani po refuzon të kompilojë thirrjet e funksionit C, i cili ka shpallje të shumta të papërshtatshme. Për shembull, nëse f shpallet si njëkohësisht 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ë version është përmirësimi i zb keştimit të këtij kushti të gabimit, kur shpalljet jo të përshtatshme shfaqen në skedarë të ndryshëm. #67699.

Objdump

Mjeti objdump tani mbështet derisa në 64-bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) dhe S390X (GOARCH=s390x).

Vet

Analizatori i ri i testeve raporton gabimet më të zakonshme në shpalljet e testeve, fuzzers, benchmarke dhe shembuj në paketat e testeve, të tilla si emra të formuluar gabim, nënshkrime të pavlefshme ose shembuj që dokumentojnë identifikues që nuk ekzistojnë. Disa nga këto gabime mund të shkaktojnë moskryerjen e testeve.

Analizuesi ekzistues printf tani raporton diagnostikën e thirrjeve të formës fmt.Printf(s), ku s është një varg i formës jo-konstante, pa argumente të tjera. Këto thirrje janë pothuajse gjithmonë gabim, pasi vlera e s mund të përmbajë simbolin %; përdorni në vend të kësaj fmt.Print. 60529. Kjo kontrollim ka tendencë të bëjë gjetje në kodin ekzistues, dhe prandaj aplikohet vetëm kur версия e gjuhës (siç tregohet 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 integrimit të vazhdueshëm kur azhurnohet në mjetin Go 1.24.

Analizuesi ekzistues buildtag tani raporton diagnostikën kur ka një kufizim ndërtimi versioni të lartë Go në direktivën //go:build. Për shembull, //go:build go1.23.1 i referohet një versioni të saktë; përdorni në vend të kësaj //go:build go1.23. #64127.

Analizuesi ekzistues copylock tani raporton diagnostikën kur një variabël, e shpallur në një cikël të trefishtë “for”, si for i := iter(); done(i); i = next(i) { … }, përmban sync.Locker, siç është sync.Mutex. Go 1.22 ka ndryshuar sjelljen e cikleve të tilla në krijimin e një variabli të ri për çdo iterim, duke kopjuar vlerat nga iterimi i mëparshëm; kjo kopjim nuk është i sigurt për loket. #66387.

GOCACHEPROG

Binar i brendshëm cmd/go dhe mekanizmi i caching të testeve tani mund të implementohen nga procese dytësore, që implementojnë protokollin JSON midis mjetit cmd/go dhe procesit dytësor, të quajtur variabla e ambientit GOCACHEPROG. Më parë kjo ishte për GOEXPERIMENT. Detajet e protokollit mund të shihen në dokumentacion.

Koha e ekzekutimit

Disa përmirësime të performancës në runtime reduktuan cost-in e CPU-s me 2-3% në mesatare për një gamë përfaqësuese të benchmark-eve. Rezultatet mund të variojnë në varësi të aplikacionit. Këto përmirësime përfshijnë një implementim të ri të integruar të map në bazë të Tabela Suedeze, ndarjes më efikase të memories për objekte të vogla dhe një implementim të ri të brendshëm të mutex-it në runtime.

Implementimi i ri i integruar i map dhe mutex-i i ri i brendshëm në runtime mund të jenë të çaktivizuar me parametrat GOEXPERIMENT=noswissmap dhe GOEXPERIMENT=nospinbitmutex gjatë ndërtimit përkatësisht.

Kompilatori

Kompiluesi tashmë ndalonte përcaktimin e metodave të reja me tipe marrësish të gjeneruar nga cgo, por ishte e mundur të anashkalohej ky kufizim përmes aliasit të tipit. Go 1.24 tani raporton gjithmonë një gabim nëse marrësi tregon një tip të gjeneruar nga cgo, drejtpërdrejt ose tërthorazi (përmes tipit të aliasit).

Lidhësi

Lidhësi tani gjeneron një identifikues ndërtimi GNU (shënim ELF NT_GNU_BUILD_ID) në platformat ELF dhe UUID (komanda ngarkimit Mach-O LC_UUID) në macOS si standard. Identifikuesi i ndërtimit ose UUID del nga identifikuesi i ndërtimit Go. Kjo mund të ndalohet me flagun e lidhësit -B none, ose të ridifinohet me flagun e lidhësit -B 0xNNNN me një vlerë të dhënë në sistemin heksadecimal nga përdoruesi.

Zhvillim

Siç u tha në shënimet e botimit Go 1.22, Go 1.24 tani kërkon për zhvillim Go 1.22.6 ose më vonë. Zhvilluesit presin që Go 1.26 do të kërkojë për zhvillim një version të veçantë Go 1.24 ose më vonë.

Biblioteka standarde

Qasja e kufizuar në sistemin e skedave me direktorinë

Tipi i ri os.Root jep mundësinë për të kryer operacione në skedarët brenda një direktorie të caktuar.

Funksioni os.OpenRoot hap direktorinë dhe kthen os.Root. Metodat mbi os.Root operon në këtë direktorium dhe nuk lejojnë rrugët të referojnë në vende jashtë direktoriumit, duke përfshirë ato që ndjekin lidhjet simbolike jashtë direktoriumit. Metodat në os.Root pasqyrojnë shumicën e operacioneve të sistemit të skedarëve të disponueshme në paketën os, 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-et tani mund të përdorin një metodë më të shpejtë dhe më të qëndrueshme testing.B.Loop për të bërë iteracione të benchmark-it të ngjashme me for b.Loop() { … } në vend të strukturave tipike ciklike që përfshijnë b.N si për shembull for range b.N. Kjo ofron dy përparësi të rëndësishme:

  • Funksioni i benchmark-ut ekzekutohet në mënyrë të saktë një herë për çdo -count, kështu që hapat e shtrenjtë të vendosjes dhe pastrimit ekzekutohen vetëm një herë.
  • Parametrat e thirrjes së funksionit dhe rezultatet vazhdojnë të jetojnë, duke parandaluar kompiluesin nga optimizimi i plotë i trupit të ciklit.

Finallizuesit e përmirësuar

Funksioni i ri runtime.AddCleanup është një mekanizëm përfundimi që është më i fleksibël, më efikas dhe më pak i ndjeshëm ndaj gabimeve se runtime.SetFinalizer. AddCleanup i bashkon një funksioni pastrimi objektit, i cili do të ekzekutohet sapo objekti të bëhet i paaksesueshëm. Megjithatë, ndryshe nga SetFinalizer, disa pastrime mund të bashkohen me një objekt të vetëm, pastrimet mund të bashkohen me treguesit e brendshëm, pastrimet normalisht nuk shkaktojnë rrjedhje kur objektet formojnë cikle, dhe pastrimet nuk e vonojnë çlirimin e objektit ose objekteve që tregohet. Kodi i ri duhet të preferojë AddCleanup përpara SetFinalizer.

Paketa e re weak

Paketa e re weak siguron tregues të dobët.

Treguesit e dobët janë një primitiv i ulët, i siguruar për të krijuar struktura që përdorin efektivisht kujtesën, si fjalorët e dobët për mapimin e vlerave, fjalorët e kanonizimit për çdo gjë që nuk mb covered nga paketa unique, dhe lloje të ndryshme të caches. Për mbështetje të këtyre rasteve përdorimi, kjo version ofron gjithashtu runtime.AddCleanup dhe maphash.Comparable.

Paketa e re crypto/mlkem

Paketa e re crypto/mlkem implementon ML-KEM-768 dhe ML-KEM-1024.

ML-KEM është një mekanizëm shkëmbimi të çelësit post-kvantor, më parë i njohur si Kyber dhe i specifikuar në FIPS 203.

Paketa të reja crypto/hkdf, crypto/pbkdf2 dhe crypto/sha3

Paketa e re crypto/hkdf implementon një funksion të bazuar në HMAC për ekstraktimin e çelësit “Extract-and-Expand” HKDF, siç përcaktohet në RFC 5869.

Paketa e re crypto/pbkdf2 implementon një funksion të bazuar në fjalëkalim për nxjerrjen e çelësit PBKDF2, siç përcaktohet në RFC 8018.

Paketa e re crypto/sha3 implementon funksionin hash SHA-3 dhe SHAKE dhe funksionet cSHAKE për zgjerimin e daljes, siç përcaktohet në FIPS 202.

Të tri paketat janë të bazuara në paketa ekzistuese nga golang.org/x/crypto/…

Kompakës FIPS 140-3

Ky version përfshin një grup të ri mekanizmash për të siguruar përputhjen 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ë realizuar algoritmet e miratuara FIPS 140-3. Aplikacionet nuk kërkojnë ndryshime për të përdorur modulin kriptografik Go për algoritmet e miratuara.

Një variabël 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ën kriptografike Go versioni v1.0.0, e cila aktualisht është në testim me laboratorin e akredituar CMVP.

Një paketë eksperimentale të re testing/synctest

Pako eksperimental i ri testing/synctest ofron mbështetje për testimin e kodit konkurrent.

  • Funksioni synctest.Run në ngre një grup gorutina në një "bulë" të izoluar. Brenda bulës, funksionet e paketës time kanë operacione mbi orët false.
  • Funksionet synctest.Wait pret derisa të gjitha gorutinat të bllokohen në bulën aktuale.

Detajet mund të shihen në dokumentacionin e paketës.

Paketa synctest është eksperimentale dhe duhet të aktivizohet me vendosjen GOEXPERIMENT=synctest. API e paketës mund të ndryshojë në lëshimet e ardhshme. Në #67434 mund të shihni më shumë detaje dhe të jepni feedback.

Ndryshime minore në bibliotekë

archive

Implementimet (*Writer.AddFS) në archive/zip dhe archive/tar tani shkruajnë kokën e direktorive për direktorët e zbrazët.

bytes

Paketa bytes shton disa funksione që punojnë me iteratoret:

  • Lines kthen një iterator mbi linjat e ndara me një rresht të ri në një slice bytes.
  • SplitSeq kthen një iterator mbi të gjitha nën-slicet e slices bytes, të ndara me separator.
  • SplitAfterSeq kthen një iterator mbi nën-slicet e slices bytes, të ndara pas çdo ndeshje të separatorit.
  • FieldsSeq kthen një iterator mbi nën-slice e bytes rreth sekuencave të karaktereve të hapësirës, siç përcaktohet unicode.IsSpace
  • FieldsFuncSeq kthen një iterator mbi nën-slice e bytes rreth sekuencave të pikave koduese Unicode që plotësojnë predikatin.

crypto/aes

Vlera e kthyer NewChipher nuk përmbush më metodat NewCTR, NewGCM, NewCBCEncrypter dhe NewCBCDecrypter. Këto metoda ishin të pa dokumentuara dhe nuk ishin të aksesueshme në të gjitha arkitekturët. Tani vlera Block duhet të kalojë direkt në funksionet përkatëse crypto/cipher. Deri tani crypto/cipher ende kontrollon këto metoda për vlerat Block, edhe nëse ato nuk mbështeten më nga biblioteca standarde.

crypto/cipher

Funksioni i ri NewGCMWithRandomNonce kthen AEAD, который реализует AES-GCM, генерируя случайный одноразовый номер во время Seal и добавляя его в начало зашифрованного текста.

Realizimi Stream, e kthyer NewCTR kur përdoret me crypto/aes tani është disa herë më e shpejtë në amd64 dhe arm64.

NewOFB, NewCFBEncrypter dhe NewCFBDecrypter tani janë shpallur të vjetra. Rejimet OFB dhe CFB janë të paautentikuara, që në përgjithësi lejon sulmet aktive të manipulojnë dhe rikuperojnë tekstin e hapur. Aplikacioneve u rekomandohet të përdorin AEAD në vend. Nëse regjimi i paautentikuar Stream është i nevojshëm, mund të përdoret NewCTR në vend.

crypto/ecdsa

PrivateKey.Sign tani krijon një nënshkrim deterministik sipas RFC 6979, nëse burimi i rastësisë është nil.

crypto/md5

Vlera e kthyer md5.New, tani gjithashtu implementon interfacinë encoding.BinaryAppender.

crypto/rand

Funksioni Read tani garanton mungesën e dështimeve. Nëse Read has një gabim gjatë leximit Reader, programi do të mbyllet në mënyrë të pakthyeshme. Vini re se Reader-i me defaut është dokumentuar gjithmonë të funksionojë me sukses, prandaj ky ndryshim duhet të prekë vetëm ato programe që rimarrin variablin Reader. Një përjashtim është bërthamoret e Linux deri në versionin 3.17, ku Reader-i me defaut 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ë disa herë më e shpejtë, zakonisht për lexime të vogla.

Në OpenBSD, Reader tani përdor arc4random_buf(3).

Funksioni i ri Text tani tani mund të gjenerojë vargje të rastësishme tekstesh të sigurta me kriptografi.

crypto/rsa

GeneroniKën tani kthen një gabim nëse kërkohet një çelës me gjatësi më të vogël se 1024 bit. Të gjitha metodat Sign, Verify, Encrypt dhe Decrypt tani kthejnë një gabim, nëse përdoren me një çelës të madhësisë më të vogël se 1024 bit. Çelësat e tillë nuk janë të sigurta dhe nuk duhet të përdoren. Krijimi i GODEBUG rsa1024min=0 rikthen sjelljen e vjetër, por zhvilluesit e Go rekomandojnë që të bëhet vetëm kur është e nevojshme dhe vetëm në teste, duke shtuar, për shembull, një rresht //go:debug rsa1024min=0 në skedarin e testimit. I ri shembull GenerateKey ofron një çelës testimi standart 2024-bit të lehtë për t'u përdorur.

Tani është e sigurt dhe më efektive të thërrasësh PrivateKey.Precompute deri te PrivateKey.Validate. Precompute tani është më i shpejtë në prani të PrecomputedValues, për shembull kur nxjerr çelësin nga JSON.

Paketa tani refuzon më shumë çelësa të gabuar, madje kur Validate nuk thirret dhe GeneroniKën tani mund të kthejë gabime të reja për burime dobësish të rastësishme. Fushat Primes dhe Precomputed strukturat 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, siç përshkruhet më poshtë.

SignPKCS1v15 dhe VerifyPKCS1v15 tani mbështesin SHA-512/224, SHA-512/256 dhe SHA-3.

GeneroniKën tani përdor një metodë pak ndryshe për gjenerimin e eksponentit privat (funksioni Karamikllas në vend të funksionit Euler). Aplikacione të rralla, të cilat rindërtojnë çelësat vetëm nga numra prim, mund të krijojnë rezultate të ndryshme, por të përputhshme.

Operacionet mbi çelësat publikë dhe privatë tani janë deri në dy herë më të shpejta në wasm.

crypto/sha*

crypto/subtle

Funksioni i ri WithDataIndependentTiming i mundëson përdoruesit të ekzekutojë funksionin me funksionalitete specifike për arkitekturën, të cilat garantojnë invariancën e disa instrukcioneve në lidhje me kohën e vlerave të të dhënave. Kjo mund të përdoret për të siguruar se kodi i krijuar për të punuar me kohë konstante nuk është optimizuar nga funksionet e nivelit të procesorit në mënyrë që të funksionojë me kohë të ndryshueshme. Në këtë moment, WithDataIndependentTiming përdor bitin PSTATE.DIT në arm64 dhe nuk bën asgjë në të gjitha arkitekturat e tjera. Krijimi i GODEBUG dataindependenttiming=1 aktivizon modalitetin DIT për të gjithë programin Go.

Përfundim XORBytes duhet të mbulohet plotësisht ose aspak me hyrjen. Sjellja e mëparshme ishte e pacaktuar në të kundërt, ndërsa tani XORBytes do të panikojë.

crypto/tls

Serveri TLS tani mbështet Encrypted Client Hello (ECH). Kjo aftësi mund të aktivizohet duke plotësuar fushën Config.EncryptedClientHelloKeys.

Mekanizmi i ri i shkëmbimit të çelësit post-kvant X25519MLKEM768 tani mbështetet dhe aktivizohet si parazgjedhje kur Config.CurvePreferences është nil. Krijimi i GODEBUG tlsmlkem=0 kthen defolt.

Mbështetje për shkëmbimin eksperimental të çelësit X25519Kyber768Draft00 është hequr.

Procesi i shkëmbimit të çelësave tani përpunohen tërësisht nga paketa crypto/tls. Procesi Config.CurvePreferences tani injorohet, dhe përmbajtja përdoret vetëm për të përcaktuar se cilat shkëmbime çelësi duhet të përfshihen kur fusha mbushet.

Fusha e re ClientHelloInfo.Extensions liston identifikuesit e zgjerimeve të marra në mesazhin Client Hello. Kjo mund të jetë e dobishme për të vënë në dukje klientët TLS.

crypto/x509

Krijimi i 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 parazgjedhur e politikave të çertifikatave është ndryshuar nga Certificate.PolicyIdentifiersCertificate.Policies. Gjatë analizës së çertifikatave, të dy fushat do të plotësohen, por kur krijohet politika e çertifikatave do të merret nga fusha Certificate.Policies në vend të Certificate.PolicyIdentifiers. Ky ndryshim mund të kthehet nëpërmjet konfigurimit GODEBUG x509usepolicies=0.

CreateCertificate tani do të gjenerojë një numër serial duke përdorur një metodë përputhëse me RFC 5280 gjatë kalimit të modelit nëpërmjet fushës Certificate.SerialNumber nil, në vend të dështimit.

Certificate.Verify tani mbështet validimin e politikave, siç definohet në RFC 5280 dhe RFC 9618. Fusha e re VerifyOptions.CertificatePolicies mund të vendoset në një grup të pranueshëm politikash OID-et. Vetëm zinxhirët e certifikatave me grafike valide politike do të kthehen nga Certificate.Verify.

MarshalPKCS8PrivateKey tani kthen një gabim në vend që të nxjerrë një çelës të gabuar RSA. (MarshalPKCS1PrivateKey nuk ka kthim gabimi dhe sjellja e tij me çelësa të gabuar të dhënë vazhdon të jetë e papërcaktuar.)

ParsePKCS1PrivateKey dhe ParsePKCS8PrivateKey tani përdorin dhe validojnë vlerat e koduara CRT, prandaj mund të refuzojnë çelësa të gabuar RSA që janë pranuar më parë. Përdorimi i konfigurimeve GODEBUG x509rsacrt=0 kthen në ri-kalkulimin e vlerave CRT.

debug/elf

Paketa debug/elf shton mbështetje për përpunimin e versioneve të simboleve në skedarët dinamikë ELF (Formati Ekzekutiv dhe i Lidhjes). Metoda e re File.DynamicVersions kthehet një listë e versioneve dinamike të përcaktuara në skedarin ELF. Metoda e re File.DynamicVersionNeeds kthehet një listë e versioneve dinamike që kërkohen nga ky skedar ELF, të cilat janë të përcaktuara në objekte të tjera ELF. Së fundmi, fushat e reja Symbol.HasVersion dhe Symbol.VersionIndex tregojnë versionin e simbolit.

kodimi

Dy interface të reja TextAppender dhe BinaryAppender janë futur për të shtuar një përfaqësim tekstual ose binar të një objekti në një slice bajtaresh. Këto interface ofrojnë të njëjtën funksionalitet si TextMarshaler dhe BinaryMarshaler, por në vend që të alokojnë një slice të ri çdo herë, ato shtojnë të dhënat drejtpërdrejt në slice-n ekzistues. Këto interface tani janë implementuar nga llojet e bibliotekës standarde, të cilat tashmë zbatojnë TextMarshaler dhe/ose BinaryMarshaler.

encoding/json

Kur ndërtohet një fushë strukture me opsionin e ri omitzero në etiketën e fushës së strukturës, do të anashkalohet nëse vlera e saj është zero. Nëse lloji i fushës ka një metodë IsZero() bool, kjo do të përdoret për të përcaktuar nëse vlera është zero. Ndryshe, vlera do të jetë zero nëse vlera zero për llojin e tij. Etiketa e fushës omitzero është më e pastër dhe më pak e predispozuar ndaj gabimeve se omitempty, kur qëllimi është të anashkalohet vlerat zero. Veçanërisht, ndryshe nga omitempty, omitzero anashkalon vlerat zero time.Time , që është një burim i zakonshëm problemeve.

Nëse të dy omitempty dhe omitzero janë përcaktuar, fusha do të anashkalohet nëse vlera është bosh ose zero (ose të dyja së bashku).

UnmarshalTypeError.Field tani tani përfshin struktura të integruara për të ofruar mesazhe më të detajuara për gabimet.

go/types

Të gjitha strukturat e të dhënave go/types, të cilat zbulojnë sekuencat e çiftit të metodave, si Len() int dhe At(int) T, tani gjithashtu kanë metoda që kthejnë iteratorë, duke e thjeshtuar kodin si ky:

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/*

log/slog

E re DiscardHandler është një trajtues që kurrë nuk përfshihet dhe gjithmonë hedh jashtë daljen e tij.

Level dhe LevelVar tani implementojnë ndërfaqen encoding.TextAppender.

math/*

net

ListenCondig tani përdor MPTCP si parazgjedhje në sistemet ku kjo mbështetet (deri tani vetëm Linux).

IP tani implementon ndërfaqen encoding.TextAppender.

net/http

Kufiri është ndryshuar Transport për përgjigjet informative 1xx në përgjigje të një kërkese. Më parë, kjo ndalonte kërkesën dhe kthente një gabim pas marrjes së më shumë se 5 përgjigjeve 1xx. Tani kjo kthen një gabim vetëm nëse gjatësia totale e të gjitha përgjigjeve 1xx tejkalon konfigurimin e cilësimeve Transport.MaxResponseHeaderBytes.

Për më tepër, kur kërkesa ka një hook për ndjekjen net/http/httptrace.ClientTrace.Got1xxResponse, tani nuk ka kufizim në numrin e përgjigjeve 1xx. Hook 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 sigurojnë një mënyrë të thjeshtë për të konfiguruar se cilat protokolle përdor serveri ose klienti HTTP.

Serveri dhe klienti mund të konfigurohen për të mbështetur lidhje të paenktuara HTTP/2.

Kur Server.Protocols përmban UnencrypterHTTP2, serveri do të pranojë lidhje HTTP/2 në porte të pa-enkriptuara. Serveri mund të pranojë njëkohësisht HTTP/1 dhe HTTP/2 të pa-enkriptuar në të njëjtin port.

Kur Transport.Protocols përmban UnencryptedHTTP2 dhe nuk përmban HTTP1, transporti do të përdorë HTTP/2 të pa-enkriptuar për adresat. http://. Nëse transporti është konfiguruar për të përdorur njëkohësisht HTTP/1 dhe HTTP/2 të pa-enkriptuar, do të përdorë HTTP/1.

Mbështetje për HTTP/2 të pa-enkriptuar përdor "HTTP/2 me njohuri paraprake" (RFC 9113, seksioni 3.3). Titulli i vjetër "Upgrade: h2c" nuk mbështetet.

net/netip

Addr, AddrPort dhe Prefix tani implementojnë ndërfaqet encoding.BinaryAppender dhe encoding.TextAppender.

net/url

URL tani gjithashtu realizon 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 nuk është e pranishme në Nano Server.

Në Windows Current, Lookup dhe LookupId tani mbështesin llogaritë e shërbimit të integruar të përdoruesit si më poshtë:

  • NT AUTHORITYSYSTEM
  • NT AUTHORITYLOCAL SERVICE
  • NT AUTHORITYNETWORK SERVICE

Në Windows Current u përshpejtua ndjeshëm kur përdoruesi aktual është i lidhur me një domain të ngadaltë, që është një rast i zakonshëm për shumë përdorues korporatash. Tani performanca e realizimit është në milisekonda, në krahasim me realizimin e mëparshëm, i cili mund të merrte disa sekonda, madje minuta, për t'u përfunduar.

Në Windows Current tani kthen përdoruesin e pronarit të procesit, kur rrjedha aktuale identifikohet 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 e vjetruar. Në kodin e ri, preferohet përdorimi i rrugës së sistemit për të përcaktuar binarin 'go', dhe të përdorim go env GOROOT për të përcaktuar GOROOT.

strings

Paketa strings shton disa funksione për të punuar me iteraatorë:

  • Lines kthen një iteraator për rrjeshtat e ndara nga një linjë e re në varg.
  • SplitSeq kthen një iteraator për të gjitha nënstringat e vargut, të ndara nga separatori.
  • SplitAfterSeq kthen një iteraator për nënstringat e vargut, të ndara pas çdo apari të separatori.
  • FieldsSeq kthen një iteraator për nënstringat e vargut përreth sekuencave të karaktereve të hapësirës, siç është përcaktuarunicode.IsSpace
  • FieldsFuncSeq kthen iterues një iterator mbi substrat e një stringu rreth sekuencave të kodit të pikave të unicode që përputhen me një predikat.

sync

Realizimi sync.Map u përmirësua, duke rritur performancën, veçanërisht për ndryshime në hartë. Për shembull, konkurrenca e ndryshimeve të grupeve të papërputhshme në harta të mëdha është më pak e mundshme dhe nuk ka më nevojë për kohë rritjeje për të arritur një përputhje të ulët në hartë.

Nëse hasni ndonjë problem, vendosni GOEXPERIMENT=nosynchashtriemap gjatë ndërtimit për të kthyer në implementimin e vjetër dhe, ju lutem, plotësoni formularin e problemit.

testing

Metoda të reja T.Context dhe B.Context kthen kontekstin që anulohet pas përfundimit të testit dhe para ekzekutimit të funksioneve të pastrimit të testit.

Metoda të reja T.Chdir dhe B.Chdir mund të përdoren për të ndryshuar direktorinë e punës gjatë realizimit të testit ose benchmarkut.

text/template

Shabllonet tani mbështesin range-over-func dhe range-over-int.

time

Koha tani implementon ndërfaqet encoding.BinaryAppender dhe encoding.TextAppender.

Ports

Linux

Siç ishte njoftuar në shënimet e lëshimit të Go 1.23, Go 1.24 kërkon kernelin 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 kompilerit go:wasmexport është shtuar në programet Go për të eksportuar funksione në host WebAssembly.

Në WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm), Go 1.24 mbështet ndërtimin e programeve Go si reaktor/librari nëpërmjet specifikimit të flagut të ndërtimit -buildmode=c-shared.

Të më shumë tipeve tani lejohet si tip argumendi ose rezultati për funksionet go:wasmimport. Në veçanti, bool, string, uintptr dhe pointer të tipeve të caktuara janë të lejuara (detaje mund të shikohen në dokumentacion), së bashku me tipe të numrave të plotë 32-bit dhe 64-bit dhe tipeve me pikë fluturuese, dhe unsafe.Pointer, të cilat janë tashmë të lejuara. Këto tipe gjithashtu lejohet si tipe argumendi ose rezultati për funksionet go:wasmexport.

Skedarët mbështetës për WebAssembly janë zhvendosur nga lib/wasm në misc/wasm.

Këndi origjinal i memories është reduktuar ndjeshëm, sidomos për aplikacione të vogla WebAssembly.

Windows

Porti 32-bit windows/arm (GOOS=windows GOARCH=arm) është shënuar si i prishur. Detaje në #70705

Burimi: linux.org.ru

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster