Jauns Go valodas laidiens, versija 1.24, tiek izdots sešus mēnešus vēlāk Iet 1.23. Lielākā daļa izmaiņu ir rīkķēdes, izpildlaika un bibliotēku ieviešanā. Kā vienmēr, izlaidums nodrošina saderības solījums Go 1. Valodu izstrādātāji sagaida, ka gandrīz visas Go programmas turpinās apkopot un darboties kā līdz šim.
Valodas izmaiņas
Go 1.24 tagad pilnībā atbalsta vispārīgie pseidonīmi: tipa aizstājvārdu var parametrizēt kā deklarēto tipu. Sīkāka informācija sadaļā valodas specifikācijas. Pagaidām šo funkciju var atspējot, iestatot GOEXPERIMENT=noaliastypeparams; Tomēr aliastypeparams opcija Go 1.25 tiks noņemta.
Darbarīki
Ejiet komanda
Go moduļi tagad var izsekot izpildāmās atkarības, izmantojot rīka direktīvu failā go.mod. Tas novērš nepieciešamību pēc iepriekšējā risinājuma, pievienojot rīkus kā tukšu importēšanu failā, ko parasti sauc par “tools.go”. Go tool komanda tagad var palaist šos rīkus papildus rīkiem, kas tiek piegādāti kopā ar Go. Vairāk informācijas var atrast dokumentācija.
Jaunais -tool karodziņš go get izraisa rīku direktīvas pievienošanu pašreizējam modulim norādītajām pakotnēm papildus prasību direktīvu pievienošanai.
Jauns meta-raksta rīks attiecas uz visiem pašreizējā moduļa rīkiem. To var izmantot, lai tos visus atjauninātu, izmantojot go get rīku, vai instalētu tos savā GOBIN direktorijā, izmantojot go instalēšanas rīku.
Izpildāmie faili, kas izveidoti, izmantojot go Run un jauno go rīka darbību, tagad tiek saglabāti Go build kešatmiņā. Tas padara iespējamu atkārtotu palaišanu palielinātās kešatmiņas dēļ. #69290.
Komandas go build and go install tagad pieņem karogu -json, kas ziņo par būvējuma izvadi un kļūdām kā strukturētu JSON izvadi standarta izvadē. Formāta informāciju var redzēt sadaļā go help buildjson.
Turklāt Go test -json tagad ziņo par izvades un veidošanas kļūdām JSON, kas sajaukta ar testa rezultātu JSON. Tos var atšķirt pēc jaunajiem darbību veidiem, taču, ja tie rada problēmas testa integrācijas sistēmā, varat atgriezties pie būvējuma teksta izvades, izmantojot GODEBUG iestatīšana gotestjsonbuildtext=1.
Jaunais GOAUTH vides mainīgais nodrošina elastīgu veidu, kā autorizēt privāto moduļu piesaisti. Sīkāku informāciju varat redzēt sadaļā goauth.
Tagad ir instalēta komanda go build galvenā moduļa versija kompilētajā binārajā failā, pamatojoties uz tagu un/vai versijas kontroles apņemšanos. Sufikss +netīrs tiks pievienots, ja ir neizdarītas izmaiņas. Karodziņu -buildvcs=false var izmantot, lai izlaistu versiju kontroles informāciju no binārā faila.
jauns GODEBUG iestatīšana toolchaintrace=1 tagad var izmantot, lai izsekotu rīku ķēdes atlases procesam komandā go.
Cgo
Cgo atbalsta jaunas C funkciju anotācijas, lai uzlabotu izpildlaika veiktspēju. #cgo noescape cFunctionName norāda kompilatoram, ka atmiņa, kas nodota C funkcijai cFunctionName, netiek izspiesta. #cgo nocallback cFunctionName norāda kompilatoram, ka C funkcija cFunctionName neizsauc nevienu Go funkciju. Vairāk informācijas var atrast cgo dokumentācija.
Cgo pašlaik atsakās apkopot izsaukumus C funkcijai, kurai ir vairākas nesaderīgas deklarācijas. Piemēram, ja f ir deklarēts gan kā void f(int) un nevar f(double), cgo ziņos par kļūdu, nevis, iespējams, ģenerēs nederīgu izsaukšanas secību f(0). Jaunums šajā laidienā ir uzlabota šī kļūdas stāvokļa noteikšana, kad nesaderīgas deklarācijas parādās dažādos failos. #67699.
Objdump
Objdump rīks tagad atbalsta 64 bitu LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) un S390X (GOARCH=s390x) demontāžu.
Tauki
Jaunais testu analizators ziņo par bieži sastopamām kļūdām testā, fuzerā, etalonā un testa komplektu deklarāciju piemēros, piemēram, nepareizi veidoti nosaukumi, nederīgi paraksti vai piemēri, kas dokumentē neesošus identifikatorus. Dažas no šīm kļūdām var izraisīt testu neveiksmi.
Esošais printf parsētājs tagad ziņo par diagnostiku izsaukumiem formā fmt.Printf(s), kur s ir nekonstanta formāta virkne bez citiem argumentiem. Šādi izsaukumi gandrīz vienmēr ir kļūda, jo s vērtība var saturēt % rakstzīmi; tā vietā izmantojiet fmt.Print. 60529. Šī pārbaude mēdz atrast lietas esošajā kodā, un tāpēc tā tiek lietota tikai tad, ja valodas versija (kā norādīta faila go.mod direktīvā go vai komentāros `//go:build) ir vismaz Go 1.24, lai jaunināšanas laikā uz Go 1.24 rīku ķēdi neradītu ilgu integrācijas pārtraukumu.
Esošais būvtaga analizators tagad ziņo par diagnostiku, ja ir nepareiza būvtaga vecākas versijas veidošanas ierobežojums Dodieties uz direktīvu //go:build. Piemēram, //go:build go1.23.1 attiecas uz punkta izlaidumu; tā vietā izmantojiet //go:build go1.23. #64127.
Esošais kopēšanas bloķēšanas analizators tagad ziņo par diagnostiku, ja mainīgais tiek deklarēts trīskāršā “for” cilpā, piemēram, for i := iter(); darīts(i); i = next(i) { … }, satur sync.Locker, piemēram, sync.Mutex. Iet 1.22 mainīja šādu cilpu uzvedību, lai katrai iterācijai izveidotu jaunu mainīgo, kopējot vērtības no iepriekšējās iterācijas; Šī kopēšana nav droša slēdzenēm. #66387.
GOCACHEPROG
Iekšējo cmd/go bināro un testa kešatmiņas mehānismu tagad var ieviest pakārtotie procesi, ieviešot JSON protokolu starp cmd/go rīku un pakārtoto procesu, ko nosauc vides mainīgais GOCACHEPROG. Iepriekš tas bija paredzēts GOEXPERIMENT. Sīkāka informācija par protokolu ir redzama dokumentācija.
Pabeigšanas laiks
Vairāki izpildlaika veiktspējas uzlabojumi reprezentatīvo etalonu kopā samazināja CPU pieskaitāmās izmaksas vidēji par 2–3%. Rezultāti var atšķirties atkarībā no lietojumprogrammas. Šie uzlabojumi ietver jaunu iebūvētu kartes ieviešanu, kuras pamatā ir Zviedru galdi, efektīvāka mazo objektu atmiņas piešķiršana un jauna mutex iekšējā izpildlaika ieviešana.
Jauno iebūvēto kartes ieviešanu un jauno iekšējo izpildlaika mutex var atspējot, izveidošanas laikā attiecīgi iestatot GOEXPERIMENT=noswissmap un GOEXPERIMENT=nospinbitmutex.
Kompilators
Kompilators jau aizliedza definēt jaunas metodes ar cgo ģenerētiem uztvērēju tipiem, taču šo ierobežojumu bija iespējams apiet, izmantojot tipa aizstājvārdu. Go 1.24 tagad vienmēr ziņo par kļūdu, ja uztvērējs tieši vai netieši (izmantojot tipa aizstājvārdu) norāda cgo ģenerētu tipu.
Saistītājs
Tagad saistītājs ģenerē GNU būvēšanas identifikatoru (ELF ieraksts NT_GNU_BUILD_ID) ELF platformās un UUID (Mach-O ielādes komanda LC_UUID) operētājsistēmā macOS pēc noklusējuma. Būvējuma ID jeb UUID ir atvasināts no Go būvējuma ID. To var izslēgt, izmantojot karodziņu -B none linker, vai ignorēt ar saitītāja karogu -B 0xNNNN ar lietotāja norādītu heksadecimālo vērtību.
Veicināšana
Kā teikts Skatiet 1.22 izlaiduma piezīmes, Go 1.24 tagad ir jāinstalē Go 1.22.6 vai jaunāka versija. Izstrādātāji sagaida, ka Go 1.26 būs nepieciešams Go 1.24 vai jaunākas versijas izlaidums.
Standarta bibliotēka
Direktoriju ierobežota piekļuve failu sistēmai
Jauns tips os.root Nodrošina iespēju veikt failu sistēmas darbības noteiktā direktorijā.
Funkcija os.OpenRoot atver direktoriju un atgriežas os.root. Metodes ieslēgtas os.root darbojas šajā direktorijā un neļauj ceļiem atsaukties uz vietām ārpus direktorija, tostarp tām, kas seko simboliskām saitēm ārpus direktorija. os.Root metodes atspoguļo lielāko daļu OS pakotnē pieejamo failu sistēmas darbību, tostarp, piemēram, os.Sakne.Atvērt, os.Root.Create, os.Root.Mkdir и os.Root.Stat.
Jauna etalona funkcija
Etaloni tagad var izmantot ātrāku metodi, kurā ir mazāk kļūdu testēšana.B.Cilpa lai atkārtotu etalonu, piemēram, b.Loop() { … }, nevis tipiskās cilpas struktūras, kas ietver bN, piemēram, diapazonam bN. Tas piedāvā divas būtiskas priekšrocības:
- Etalona funkcija tiek izpildīta tieši vienu reizi vienā skaitā, tāpēc dārgās iestatīšanas un tīrīšanas darbības tiek veiktas tikai vienu reizi.
- Funkciju izsaukšanas parametri un rezultāti darbojas, neļaujot kompilatoram pilnībā optimizēt cilpas pamattekstu.
Uzlaboti finālisti
Jauna funkcija izpildlaiks.AddCleanup ir pabeigšanas mehānisms, kas ir elastīgāks, efektīvāks un mazāk pakļauts kļūdām nekā izpildlaiks.SetFinalizer. AddCleanup objektam pievieno tīrīšanas funkciju, kas tiks palaista, tiklīdz objekts kļūs nepieejams. Tomēr atšķirībā no SetFinalizer vienam objektam var pievienot vairākas tīrīšanas, iekšējām norādēm var pievienot tīrīšanas, tīrīšana parasti neizraisa noplūdes, kad objekti veido ciklu, un tīrīšana neaizkavē objekta vai objektu atdalīšanu, uz kuriem tas norāda. Jaunajam kodam vajadzētu dot priekšroku AddCleanup, nevis SetFinalizer.
Jauna vāja pakete
Jauna pakete vājš sniedz vājās norādes.
Vājās norādes ir zema līmeņa primitīvs elements, kas paredzēts, lai izveidotu atmiņu efektīvas struktūras, piemēram, vājas vārdnīcas vērtību kartēšanai, kanonizācijas vārdnīcas visam, ko neaptver pakotne. unikālsun dažāda veida kešatmiņas. Lai atbalstītu šos lietošanas gadījumus, šis laidiens arī nodrošina izpildlaiks.AddCleanup и maphash.Salīdzināms.
Jauna kriptovalūtu/mlkem pakotne
Jauna pakete crypto/mlkem ievieš ML-KEM-768 un ML-KEM-1024.
ML-KEM ir pēckvantu atslēgu apmaiņas mehānisms, kas agrāk bija pazīstams kā Kyber un norādīts FIPS 203.
Jaunas pakotnes crypto/hkdf, crypto/pbkdf2 un crypto/sha3
Jauna pakete crypto/hkdf ievieš uz HMAC balstītu “Extract-and-Expand” atslēgas atvasināšanas funkciju HKDF, kā noteikts RFC 5869.
Jauna pakete crypto/pbkdf2 ievieš uz paroli balstītu atslēgu atvasināšanas funkciju PBKDF2, kā noteikts RFC 8018.
Jauna pakete crypto/sha3 ievieš SHA-3 jaucējfunkciju un SHAKE un cSHAKE paplašināmās izvades funkcijas, kā noteikts FIPS 202.
Visas trīs pakotnes ir balstītas uz esošajām golang.org/x/crypto/… pakotnēm.
FIPS 140-3 atbilstība
Šis laidiens ietver jauns mehānismu kopums, lai nodrošinātu FIPS 140-3 atbilstību.
Go kriptogrāfijas modulis ir iekšējo standarta bibliotēku pakotņu komplekts, kas tiek pārskatāmi izmantots, lai ieviestu FIPS 140-3 apstiprinātus algoritmus. Lietojumprogrammām nav nepieciešamas izmaiņas, lai izmantotu Go kriptogrāfijas moduli apstiprinātiem algoritmiem.
Jauno vides mainīgo GOFIPS140 var izmantot, lai atlasītu Go kriptogrāfijas moduļa versiju, ko izmantot būvniecībā. Jauns GODEBUG iestatīšana fips140 var izmantot, lai darbības laikā iespējotu FIPS 140-3 režīmu.
Go 1.24 ietver Go kriptogrāfijas moduli v1.0.0, kas pašlaik tiek testēts ar CMVP akreditētu laboratoriju.
Jaunas eksperimentālās pakotnes testēšana/sinhronizācija
Jauna eksperimentālā pakete testēšana/sinhronizācija Nodrošina atbalstu vienlaicīga koda testēšanai.
- Funkcija synctest.run vada gorutīnu grupu izolētā "burbulī". Pakas funkcijas burbulī laiks darboties ar viltus pulksteņiem.
- Funkcijas sinhronizēt.pagaidiet pagaidiet, līdz visas gorutīnas tiek bloķētas pašreizējā burbulī.
Sīkāka informācija atrodama iepakojuma dokumentācijā.
Sinhronizācijas testa pakotne ir eksperimentāla, un tā ir jāiespējo, iestatot GOEXPERIMENT=Synctest. Pakotnes API turpmākajos laidienos var mainīties. IN #67434 Varat skatīt sīkāku informāciju un sniegt atsauksmes.
Nelielas izmaiņas bibliotēkā
arhīvs
(*Writer.AddFS) implementācijas arhīvā/zip un arhīvā/tar tagad raksta direktorija galveni tukšam direktorijam.
baiti
Paka baiti pievieno vairākas funkcijas, kas darbojas ar iteratoriem:
- Līnijas Atgriež iteratoru virs ar jaunu rindiņu atdalītām virknēm baitu daļā.
- SplitSeq atgriež iteratoru visās ar atdalītāju atdalītās baitu slāņa apakššķēlēs.
- SplitAfterSeq atgriež iteratoru virs baitu slāņa apakšsķēlēm, kas tiek sadalītas pēc katras atdalītāja parādīšanās.
- LaukiSeq atgriež iteratoru virs baitu slāņa apakšsķēlēm ap atstarpes rakstzīmju sekvencēm, kā noteikts unicode.IsSpace
- FieldsFuncSeq atgriež iteratoru virs baitu slāņa apakšsķēlēm ap unikoda koda punktu sekvencēm, kas atbilst predikātam.
crypto/aes
Atdeves vērtība NewChipher vairs neievieš NewCTR, NewGCM, NewCBCEncrypter un NewCBCDecrypter metodes. Šīs metodes nebija dokumentētas un nebija pieejamas visās arhitektūrās. Tagad nozīme Bloķēt jānodod tieši attiecīgajām funkcijām šifrēšana/šifrēšana. Pašlaik šifrēšanas/šifrēšanas funkcija joprojām pārbauda šīs metodes bloķēšanas vērtībās, lai gan standarta bibliotēka tās vairs neatbalsta.
šifrēšana/šifrēšana
Jauna funkcija NewGCMWithRandomNonce atgriežas AEAD, kas ievieš AES-GCM, Seal laikā ģenerējot nejaušu nonce un pievienojot to šifrētam tekstam.
Ieviešana Straume, atgriezās Jauns VKS lietojot kopā ar crypto/aes tagad vairākas reizes ātrāks amd64 un arm64.
JaunsOFB, JaunsCFBEšifrētājs и JaunsCFBD atšifrētājs tagad ir pasludināti par novecojušiem. OFB un CFB režīmi nav autentificēti, kas parasti ļauj aktīviem uzbrukumiem manipulēt un atgūt vienkāršu tekstu. Ieteicams lietot aplikācijas AEAD pretī. Ja neautentificēts režīms Straume nepieciešams, var izmantot Jauns VKS pretī.
kriptogrāfija/ecdsa
PrivateKey.Sign tagad izveido deterministisko parakstu saskaņā ar RFC 6979, ja nejaušības avots ir nulle.
crypto/md5
Atdeves vērtība md5.jauns, tagad arī ievieš saskarni encoding.binaryappender.
kriptogrāfija/rands
Funkcija Lasīt tagad garantē nekādu neveiksmju. Ja Lasīšanas laikā rodas kļūda Lasītājs, programma tiks neatgriezeniski pārtraukta. Ņemiet vērā, ka ir dokumentēts, ka noklusējuma Reader vienmēr darbojas veiksmīgi, tāpēc šīm izmaiņām vajadzētu ietekmēt tikai tās programmas, kas ignorē Reader mainīgo. Viens izņēmums ir Linux kodoli pirms versijas 3.17, kur noklusējuma lasītājs joprojām atver /dev/urandom un var neizdoties.
Operētājsistēmā Linux 6.11 un jaunākās versijās Reader tagad izmanto nejaušu sistēmas izsaukumu, izmantojot vDSO. Tas ir vairākas reizes ātrāk, parasti maziem lasījumiem.
OpenBSD Reader tagad izmanto arc4random_buf(3).
Jauna funkcija Teksts tagad var ģenerēt kriptogrāfiski drošas nejaušas teksta virknes.
kriptonauda/rsa
GenerateKey tagad atgriež kļūdu, ja tiek pieprasīts atslēgas garums, kas mazāks par 1024 bitiem. Visas parakstīšanas, pārbaudes, šifrēšanas un atšifrēšanas metodes tagad atgriež kļūdu, ja tās tiek izmantotas ar atslēgas izmēru, kas mazāks par 1024 bitiem. Šādas atslēgas ir nedrošas, un tās nevajadzētu lietot. GODEBUG iestatīšana rsa1024min=0 atjauno veco uzvedību, taču Go izstrādātāji iesaka to darīt tikai nepieciešamības gadījumā un tikai testos, piemēram, testa failam pievienojot rindiņu //go:debug rsa1024min=0. Jauns piemērs GenerateKey nodrošina viegli lietojamu standarta 2024 bitu testa atslēgu.
Tagad ir drošāk un efektīvāk zvanīt PrivateKey.Precompute līdz PrivateKey.Validate. Priekšaprēķins tagad ir ātrāks, ja ir daļēji aizpildīts Iepriekš aprēķinātās vērtības, piemēram, izvelkot atslēgu no JSON.
Pakotne tagad noraida vairāk nederīgu atslēgu pat tad, ja netiek izsaukta pārbaude, un GenerateKey tagad var atgriezt jaunas kļūdas bojātiem nejaušības avotiem. Lauki Primes и Iepriekš aprēķināts struktūras PrivateKey tagad tiek izmantotas un apstiprinātas pat tad, ja trūkst dažu vērtību. Ir arī izmaiņas crypto/x509 RSA atslēgu parsēšanai un izvilkšanai, kas aprakstītas tālāk.
ParakstītPKCS1v15 и Pārbaudiet PKCS1v15 tagad atbalsta SHA-512/224, SHA-512/256 un SHA-3.
GenerateKey tagad izmanto nedaudz atšķirīgu metodi, lai ģenerētu privāto eksponentu (Carmichael funkcija, nevis Eilera funkcija). Retas lietojumprogrammas, kas ārēji atjauno atslēgas tikai no pirmskaitļiem, var radīt atšķirīgus, bet saderīgus rezultātus.
Darbības ar publiskajām un privātajām atslēgām tagad ir līdz pat divām reizēm ātrākas ar wasm.
crypto/sha*
- crypto/sha1: atgriešanas vērtība sha1.Jauns tagad arī ievieš saskarni encoding.binaryappender.
- crypto/sha256: vērtības atgrieztas sha256.Jauns и sha256.Jaunums224 tagad arī ieviest saskarni encoding.binaryappender.
- crypto/sha512: vērtības atgrieztas sha512.Jauns, sha512.Jaunums384, sha512.Jaunums512_224 и sha512.Jaunums512_256, tagad arī ieviesiet saskarni encoding.binaryappender.
kriptogrāfija/smalks
Jauna funkcija ArDataIndependentTiming ļauj lietotājam izpildīt funkciju ar iespējotām arhitektūrai raksturīgām funkcijām, kas nodrošina, ka noteiktas instrukcijas netiek mainītas attiecībā pret datu vērtības laiku. To var izmantot, lai nodrošinātu, ka kods, kas rakstīts palaišanai nemainīgā laikā, nav optimizēts procesora līmeņa funkcijām, lai tas darbotos mainīgā laikā. Pašlaik WithDataIndependentTiming izmanto PSTATE.DIT bitu arm64 un nedara neko visās citās arhitektūrās. GODEBUG iestatīšana dataindependenttiming=1 iespējo DIT režīmu visai Go programmai.
secinājums XORbaiti pilnībā vai vispār nepārklājas ar ievadi. Iepriekš uzvedība nebija definēta citādi, bet tagad XORBytes būs panikā.
crypto/tls
TLS serveris tagad atbalsta Encrypted Client Hello (ECH). Šo funkciju var iespējot, aizpildot lauku. Config.EncryptedClientHelloKeys.
Jauns pēckvantu atslēgu apmaiņas mehānisms X25519MLKEM768 tagad tiek atbalstīts un iespējots pēc noklusējuma, kad Config.CurvePreferences ir nulle. GODEBUG iestatīšana tlsmlkem=0 atgriež noklusējuma vērtību.
Eksperimentālās X25519Kyber768Draft00 atslēgas apmaiņas atbalsts ir noņemts.
Atslēgu apmaiņas pasūtījumu tagad pilnībā apstrādā kripto/tls pakotne. Pasūtiet Config.CurvePreferences tagad tiek ignorēts, un saturs tiek izmantots tikai, lai noteiktu, kuras atslēgu apmaiņas iekļaut, kad lauks ir aizpildīts.
Jauns lauks ClientHelloInfo.Extensions Uzskaita to paplašinājumu identifikatoru sarakstu, kas saņemti klienta sveikā ziņojumā. Tas var būt noderīgi pirkstu nospiedumu noņemšanai TLS klientiem.
crypto/x509
GODEBUG iestatīšana x509sha1 ir noņemts. Sertifikācija. Pārbaudiet vairs neatbalsta SHA-1 balstītus parakstus.
OID tagad ievieš saskarnes encoding.binaryappender и encoding.TextAppender.
Noklusējuma sertifikāta politikas lauks ir mainīts no Certificate.PolicyIdentifiers par Sertifikāts. Politikas. Parsējot sertifikātus, tiks aizpildīti abi lauki, bet, veidojot sertifikātu politiku, tie tiks ņemti no lauka Certificate.Policies, nevis Certificate.PolicyIdentifiers. Šīs izmaiņas var atsaukt. GODEBUG iestatīšana x509usepolicies=0.
Izveidot sertifikātu tagad ģenerēs sērijas numuru, izmantojot RFC 5280 saderīgu metodi, nododot veidnes lauku Sertifikāts. Sērijas numurs nulle, nevis crash.
Sertifikāts. Pārbaudi tagad atbalsta politikas validāciju, kā noteikts RFC 5280 un RFC 9618. Jauns lauks VerifyOptions.CertificatePolicies var iestatīt uz pieņemamu politiku kopu OID. Tiks atgrieztas tikai sertifikātu ķēdes ar derīgām politikas diagrammām Sertifikāts. Pārbaudi.
MarshalPKCS8PrivateKey tagad atgriež kļūdu, nevis izgūst nederīgu RSA atslēgu. (MarshalPKCS1PrivateKey nav kļūdu atgriešanas, un tā darbība, ja tiek sniegtas nederīgas atslēgas, paliek nenoteikta.)
ParsePKCS1PrivateKey и ParsePKCS8PrivateKey tagad izmantojiet un apstipriniet kodētās CRT vērtības, lai varētu noraidīt nederīgās RSA atslēgas, kas iepriekš tika pieņemtas. Lietošana GODEBUG iestatījumi x509rsacrt=0 atgriežas pie CRT vērtību pārrēķināšanas.
atkļūdošana/elfs
Paka atkļūdošana/elfs Pievieno atbalstu simbolu versiju apstrādei dinamiskos ELF (izpildāmā un saistāmā formāta) failos. Jauna metode File.DynamicVersions Atgriež ELF failā definēto dinamisko versiju sarakstu. Jauna metode File.DynamicVersionNeeds Atgriež šim ELF failam nepieciešamo dinamisko versiju sarakstu, kas definētas citos ELF objektos. Beidzot jauni lauki Simbols.HasVersion и Symbol.VersionIndex norādiet simbola versiju.
šifrēšana
Divas jaunas saskarnes Teksta papildinājums и Binārais papildinājums tika ieviesti, lai baitu šķēlei pievienotu teksta vai bināro objekta attēlojumu. Šīs saskarnes nodrošina tādu pašu funkcionalitāti kā TextMarshaler и Binārais Marshaler, taču tā vietā, lai katru reizi piešķirtu jaunu daļu, tie pievieno datus tieši esošai sadaļai. Šīs saskarnes pašlaik īsteno standarta bibliotēku tipi, kas jau ievieš TextMarshaler un/vai BinaryMarshaler.
kodējums/json
Veidojot, struktūras lauks ar jauno opciju izlaist nulli struktūras lauka tagā tiks izlaists, ja tā vērtība ir nulle. Ja lauka tipam ir IsZero() bool metode, tā tiks izmantota, lai noteiktu, vai vērtība ir nulle. Pretējā gadījumā vērtība būs nulle, ja tā nulles vērtība tā veidam. Lauka izlaiduma tags ir tīrāks un mazāk pakļauts kļūdām nekā izlaidums, ja mērķis ir izlaist nulles vērtības. Konkrēti, atšķirībā no omitempty, omitzero izlaiž nulles laiks.laiks vērtības, kas ir bieži sastopams problēmu avots.
Ja ir norādīts gan izlaidums, gan nulle, lauks tiks izlaists, ja vērtība ir tukša vai nulle (vai abi).
UnmarshalTypeError.Field tagad ietver iebūvētas struktūras, lai nodrošinātu detalizētākus kļūdu ziņojumus.
go/types
Visām go/types datu struktūrām, kas atklāj metožu pāru sekvences, piemēram, Len() int un At(int) T, tagad ir arī metodes, kas atgriež iteratorus, ļaujot izmantot vienkāršāku kodu, piemēram:
params := fn.Tips.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
Par šo:
for param := range fn.Signature().Params().Variables() { use(param)}
Metodes: Interfeiss. EmbeddedTypes Interfeiss. ExplicitMethods Interfeiss.Metodes MethodSet.Methods Nosaukts.Metodes Darbības joma.Bērni Struktūra.Lauki Korpuss.Mainīgie TypeList.Types TypeParamList.TypeParams Savienība.Noteikumi
hash/*
- hash/adler32: atgriešanas vērtība Jaunums, tagad arī ievieš saskarni encoding.binaryappender
- hash/crc32: vērtības atgrieztas Jaunums и JaunsIEEE, tagad arī ieviesiet saskarni encoding.binaryappender
- hash/crc64: atgriešanas vērtība Jaunums, tagad arī ievieš saskarni encoding.binaryappender
- hash/fnv: vērtības atgrieztas New32 Jaunums32a New64 Jaunums64a New128 и Jaunums128a, tagad arī ieviesiet saskarni encoding.binaryappender
- hash/maphash: jaunas funkcijas Salīdzināms и RakstītSalīdzināms var aprēķināt jebkuras salīdzināmas vērtības jaucējvērtību. Tas ļauj jaukt jebko, ko var izmantot kā Go vārdnīcas atslēgu.
baļķis/slogs
Jauns DiscardHandler ir apstrādātājs, kas nekad nav iespējots un vienmēr atmet savu izvadi.
Mājaslapas veids и LevelVar tagad ieviesiet saskarni encoding.TextAppender.
matemātika/*
- matemātika/lielais: peldēt, Int и Žurka tagad ieviesiet saskarni encoding.TextAppender.
- matemātika/rands: novecojuši augstākā līmeņa funkciju izsaukumi Sēkla vairs nav nekādas ietekmes. Lai atjaunotu veco uzvedību, varat izmantot GODEBUG iestatīšana randseednop=0. Plašāks konteksts piedāvājums 67273.
- math/rand/v2: ChaCha8 и PCG tagad ieviesiet saskarni encoding.binaryappender.
neto
Klausieties Condig tagad pēc noklusējuma izmanto MPTCP sistēmās, kurās tas tiek atbalstīts (šobrīd tikai Linux).
IP tagad ievieš saskarni encoding.TextAppender.
net/http
Ierobežojums ir mainījies Piegāde uz saņemtajām 1xx informatīvajām atbildēm, atbildot uz pieprasījumu. Iepriekš tas apturēja pieprasījumu un atgrieza kļūdu pēc vairāk nekā 5 1xx atbilžu saņemšanas. Tagad tas atgriež kļūdu tikai tad, ja visu 1xx atbilžu kopējais lielums pārsniedz konfigurācijas iestatījumu Transport.MaxResponseHeaderBytes.
Arī tad, ja pieprasījumam ir izsekošanas āķis net/http/httptrace.ClientTrace.Got1xxResponse, tagad kopējais atbilžu skaits 1xx nav ierobežots. Got1xxResponse āķis var atgriezt kļūdu, lai apturētu pieprasījumu.
Piegāde и Server tagad ir HTTP2 lauks, kas ļauj konfigurēt HTTP/2 protokola iestatījumus.
Jauni lauki Serveris. Protokoli и Transports.Protokoli nodrošina vienkāršu veidu, kā konfigurēt, kurus HTTP protokolus izmanto serveris vai klients.
Serveri un klientu var konfigurēt, lai atbalstītu nešifrētus HTTP/2 savienojumus.
Kad Serveris. Protokoli satur UnencrypterHTTP2, serveris pieņems HTTP/2 savienojumus nešifrētos portos. Serveris var pieņemt gan HTTP/1, gan nešifrētu HTTP/2 vienā portā.
Kad Transports.Protokoli satur UnencryptedHTTP2 un nesatur HTTP1, transportēšana adresēm izmantos nešifrētu HTTP/2 http://. Ja transports ir konfigurēts, lai izmantotu gan HTTP/1, gan nešifrētu HTTP/2, tas izmantos HTTP/1.
Atbalsts nešifrētam HTTP/2 izmanto HTTP/2 ar tālākmācību (RFC 9113, 3.3. sadaļa). Novecojusi galvene “Upgrade: h2c” netiek atbalstīta.
tīkls/netip
Addr, AdrPort и Prefikss tagad ieviest saskarnes encoding.binaryappender и encoding.TextAppender.
tīkls/url
URL tagad arī ievieš saskarni encoding.binaryappender.
OS/lietotājs
Operētājsistēmā Windows strāva tagad var izmantot Windows Nano Server. Ieviešana ir atjaunināta, lai izvairītos no NetApi32 bibliotēkas funkciju izmantošanas, kuras trūkst Nano Server.
Operētājsistēmā Windows strāva, Lookup и Uzmeklēšanas ID tagad atbalsta šādus iebūvētos lietotāju pakalpojumu kontus:
- NT AUTORITĀTES SISTĒMA
- NT AUTHORITYLOCAL SERVICE
- NT AUTORITĀCIJAS TĪKLA PAKALPOJUMS
Operētājsistēmā Windows strāva tika ievērojami paātrināts, kad pašreizējais lietotājs tiek pievienots lēnam domēnam, kas ir izplatīts gadījums daudziem korporatīvajiem lietotājiem. Jaunās ieviešanas veiktspēja tagad ir milisekundes, salīdzinot ar iepriekšējo ieviešanu, kuras pabeigšana var aizņemt vairākas sekundes, pat minūtes.
Operētājsistēmā Windows strāva tagad atgriež procesa īpašnieka lietotāju, ja pašreizējais pavediens uzdodas par citu lietotāju. Iepriekš tas atgrieza kļūdu.
regexp
Regexp tagad ievieš saskarni kodējums.TextAdapter.
runtime
Funkcija GOROOT tagad ir novecojis. Jaunākajās vidēs ieteicams izmantot sistēmas ceļu, lai noteiktu "go" bināro vērtību, un izmantot go env GOROOT, lai noteiktu GOROOT.
virknes
Paka virknes pievieno vairākas funkcijas darbam ar iteratoriem:
- Līnijas Atgriež iteratoru virknē ar jaunām rindiņām atdalītām rindām.
- SplitSeq atgriež iteratoru visās virknes apakšvirknēs, kas atdalītas ar atdalītāju.
- SplitAfterSeq atgriež iteratoru virs virknes apakšvirknēm, kas tiek sadalītas pēc katras atdalītāja parādīšanās.
- LaukiSeq atgriež iteratoru virs virknes apakšvirknēm ap atstarpju rakstzīmju sekvencēm, kā noteiktsunicode.IsSpace
- FieldsFuncSeq Atgriež iteratoru virs virknes apakšvirknēm ap unikoda koda punktu sekvencēm, kas atbilst predikātam.
sinhronizēt
Ieviešana sync.map ir mainīts, lai uzlabotu veiktspēju, jo īpaši attiecībā uz vārdnīcas izmaiņām. Piemēram, nesavienotu kopu izmaiņu strīds ir mazāk ticams lielās vārdnīcās, un vairs nav nepieciešams uzkrāšanās laiks, lai sasniegtu zemu strīdu vārdnīcas slodzi.
Ja rodas kādas problēmas, izveides laikā iestatiet GOEXPERIMENT=nosynchashtriemap, lai atgrieztos pie vecās ieviešanas, un lūdzu aizpildiet problēmas veidlapu.
testēšana
Jaunas metodes T.Konteksts и B.Konteksts atgriezt kontekstu, kas tiek atmests pēc testa pabeigšanas un pirms testa tīrīšanas funkciju izpildes.
Jaunas metodes T.Čdir и B.Čdir var izmantot, lai mainītu darba direktoriju testa vai etalona laikā.
teksts/veidne
Veidnes tagad atbalsta diapazonu pār-funkciju un diapazonu-over-int.
laiks
Laiks tagad ievieš saskarnes encoding.binaryappender и encoding.TextAppender.
ostas
Linux
Kā tas bija paziņoja Saskaņā ar Go 1.23 izlaišanas piezīmēm, Go 1.24 nepieciešama Linux kodola versija 3.2 vai jaunāka versija.
Dārvina
Go 1.24 ir pēdējais laidiens, kas darbosies operētājsistēmā macOS 11 Big Sur. Go 1.25 būs nepieciešama macOS 12 Monterey vai jaunāka versija.
WebAssembly
Go:wasmexport kompilatora direktīva ir pievienota Go programmām, lai eksportētu funkcijas uz WebAssembly resursdatoru.
WebAssembly sistēmas interfeisa priekšskatījumā 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 atbalsta Go programmas izveidi kā reaktors/bibliotēka norādot būvēšanas karogu -buildmode=c-shared.
Tagad funkcijām go:wasmimport kā argumentu vai rezultātu tipi ir atļauti vairāki veidi. Jo īpaši ir atļauti bool, string, uintptr un norādes uz noteiktiem veidiem (sīkāku informāciju skatiet sadaļā dokumentācija), kā arī 32 bitu un 64 bitu veselo skaitļu un peldošā komata tipiem un unsafe.Pointer, kas jau ir atļauti. Šie veidi ir atļauti arī kā argumentu vai rezultātu tipi funkcijām go:wasmexport.
WebAssembly atbalsta faili ir pārvietoti uz lib/wasm no misc/wasm.
Sākotnējais atmiņas apjoms ir ievērojami samazināts, īpaši mazām WebAssembly lietojumprogrammām.
Windows
32 bitu logu/rokas ports (GOOS=windows GOARCH=arm) ir atzīmēts kā bojāts. Sīkāka informācija sadaļā #70705
Avots: linux.org.ru
