Jaunais Go valodas izlaidums, 1.24 versija, tiek izlaists sešus mēnešus pēc Go 1.23. Lielākā daļa izmaiņu attiecas uz rīku komplekta, izpildlaika un bibliotēku īstenošanu. Kā vienmēr, izlaidums nodrošina saderības solījumu Go 1. Izstrādātāji sagaida, ka gandrīz visas Go programmas turpinās kompilēt un darboties kā iepriekš.
Izmaiņas valodā
Go 1.24 tagad pilnībā atbalsta ģeneriskos tipu aliasus: tipa alias var būt parametrizēts kā deklarēts tips. Sīkāka informācija ir valodas specifikācijā. Pagājušajā iespējā varat to atslēgt, uzstādot GOEXPERIMENT=noaliastypeparams; tomēr opcija aliastypeparams tiks noņemta Go 1.25 versijā.
Rīki
Go komanda
Go moduļi tagad var sekot izpildāmajām atkarībām, izmantojot rīka direktīvu go.mod failā. Tas novērš iepriekšējo apgaitu risinājumu, kurā rīki tika pievienoti kā tukši importi failā, parasti sauktā "tools.go". Go rīku komanda tagad var palaist šos rīkus papildus rīkiem, kas tiek piegādāti kopā ar Go. Papildu informāciju var atrast dokumentācijā.
Jaunais karogs -tool priekš go get noved pie rīka direktīvas pievienošanas pašreizējam modulim norādītajiem iepakojumiem, papildus pieprasījumu direktīvu pievienošanai.
CSIStorageCapacity meta-raksts tools attiecas uz visiem rīkiem pašreizējā modulī. To var izmantot, lai visus tos atjauninātu ar go get tool vai lai instalētu tos savā GOBIN direktorijā, izmantojot go install tool.
Izpildāmie faili, kas izveidoti ar go run, un jaunā go tool uzvedība tagad tiek kešoti Go kompilācijas kešā. Tas padara atkārtotu palaišanu ātrāku, palielinot kešu. #69290.
Komandas go build un go install tagad pieņem karogu -json, kas ziņo par kompilācijas izvadi un kļūdām kā strukturētu JSON izvadi standarta izvādē. Formāta detaļas var redzēt go help buildjson.
Turklāt go test -json tagad ziņo par kompilācijas izvadi un kļūdām JSON formātā, sapludinot to ar testēšanas rezultātu JSON. Tos var atšķirt pēc jauniem Action tipi, taču, ja tie rada problēmas integrācijas testēšanas sistēmā, varat atgriezties pie teksta izvades kompilēšanai caur GODEBUG iestatījumu gotestjsonbuildtext=1.
Jaunā GOAUTH vides mainīgā sniedz elastīgu veidu, kā autorizēt privātās moduļu vilkšanas. Sīkāka informācija ir pieejama go help goauth.
Go build komanda tagad uzstāda pamatojuma moduļa versiju sarakstā izveidotajā binārajā failā, pamatojoties uz tagu un/vai versiju kontroles izmaiņu. Pielikums +dirty tiks pievienots, ja ir nesaglabātas izmaiņas. Var izmantot karodziņu -buildvcs=false, lai izlaistu versiju kontroles informāciju no binārā faila.
Jauna GODEBUG iestatījumi toolchaintrace=1 tagad var tikt izmantots, lai izsekotu rīku izvēles procesu go komandā.
Cgo
Cgo atbalsta jaunus uzlabojumus C funkcijām, lai uzlabotu izpildes laika veiktspēju. #cgo noescape cFunctionName informē kompilatoru, ka nodotā funkcijai C cFunctionName atmiņa neliekas. #cgo nocallback cFunctionName informē kompilatoru, ka C funkcija cFunctionName nesauc atpakaļ nevienu Go funkciju. Plašāku informāciju var atrast cgo dokumentācijā.
Cgo šobrīd noraida kompilāciju C funkcijām ar vairākām nesaderīgām deklarācijām. Piemēram, ja f ir deklarēts kā vienlaikus void f(int) un void f(double), cgo ziņos par kļūdu, nevis mēģinās ģenerēt nepareizu f(0) izsaukumu. Šajā laidienā ir uzlabota šī kļūdas nosacījuma atklāšana, kad nesaderīgas deklarācijas parādās dažādos failos. #67699.
Objdump
Objdump rīks tagad atbalsta 64-bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) un S390X (GOARCH=s390x) disasembļošanu.
Vet
Jaunais tests analītiskais rīks ziņo par bieži sastopamām kļūdām testu deklarācijās, fuzzers, benchmarks un paraugiem testu paketēs, piemēram, nepareizi veidotiem nosaukumiem, nepareizām parakstiem vai paraugiem, kas dokumentē neesošus identifikatorus. Dažas no šīm kļūdām var novest pie testu neizpildes.
Esošais printf analītiskais rīks tagad ziņo par diagnostiku fmt.Printf(s) izsaukumiem, kur s ir nesastādīta formāta virkne bez citiem argumentiem. Šādi izsaukumi gandrīz vienmēr ir kļūda, jo s var saturēt simbolu %; tā vietā izmantojiet fmt.Print. 60529. Šī pārbaude parasti atklāj esošo kodu, tāpēc tiek piemērota tikai tad, kad valodas versija (kā norādīts go.mod faila go modījošajā direktīvā vai komentāros `//go:build) ir vismaz Go 1.24, lai izvairītos no nepārtrauktas integrācijas kļūdām, atjauninot uz Go 1.24 rīku komplektu.
Esojoja analīze buildtag tagad ziņo par diagnostiku, kad ir kļūda vecākās versijas būvniecības ierobežojums Go direktīvā //go:build. Piemēram, //go:build go1.23.1 atsaucas uz punktu izlaidumu; tā vietā izmantojiet //go:build go1.23. #64127.
Esojoja analīze copylock tagad ziņo par diagnostiku, kad mainīgais, kas pasludināts trīskāršā “for” ciklā, piemēram, for i := iter(); done(i); i = next(i) { … }, satur sync.Locker, piemēram, sync.Mutex. Go 1.22 izmainīja šādu ciklu uzvedību, izveidojot jaunu mainīgo katrai iterācijai, kopējot vērtības no iepriekšējās iterācijas; šī kopēšana nav droša attiecībā uz lokiem. #66387.
GOCACHEPROG
Iekšējais fails cmd/go un testu kešatmiņas mehānisms tagad var tikt realizēts apakšprocesos, kas ievieš JSON protokolu starp rīku cmd/go un apakšprocesu, ko nosaka mainīgais videi GOCACHEPROG. Agrāk tas bija par GOEXPERIMENT. Protokola detaļas var apskatīt dokumentācijā.
Izpildes laiks
Dažādi veiktspējas uzlabojumi izpildlaikā samazināja CPU pārslodzes vidēji par 2-3% starp reprezentatīvu benchmarku kopu. Rezultāti var atšķirties atkarībā no lietojuma. Šie uzlabojumi iekļauj jaunu iebūvētu map izpildi, kas balstīta uz Zviedru tabulām, efektīvāku mazu objektu atmiņas piešķiršanu un jaunu iekšēju izpildlaika mutexu izpildi.
Jaunā iebūvētā map izpilde un jauns iekšējs izpildlaika mutex var tikt atvienots ar GOEXPERIMENT=noswissmap un GOEXPERIMENT=nospinbitmutex iestatījumiem attiecīgi būvniecības laikā.
Kompilers
Kompilers jau aizliedza jaunu metožu definēšanu ar saņēmēja tipiem, kas tika ģenerēti ar cgo, taču bija iespējams apej šo ierobežojumu caur tipa aliasu. Go 1.24 tagad vienmēr ziņo par kļūdu, ja saņēmējs apzīmē ģenerētu cgo tipu, tieši vai netieši (caur tipa aliasu).
Linkeris
Linkeris tagad pēc noklusējuma ģenerē GNU kompilācijas identifikatoru (ELF NT_GNU_BUILD_ID ieraksts) ELF platformās un UUID (MacOS ielādes komanda LC_UUID) pēc noklusējuma. Kompilācijas identifikators vai UUID tiek ģenerēts no Go kompilācijas identifikatora. To var izslēgt ar linkera karogu -B none vai pārrakstīt ar linkera karogu -B 0xNNNN ar lietotāja norādītu heksadecimālo vērtību.
Izveidošana
Kā norādīts Go 1.22 izlaiduma piezīmēs, Go 1.24 tagad prasa Go 1.22.6 vai vēlākai versijai. Izstrādātāji gaida, ka Go 1.26 prasīs Go 1.24 vai vēlāk izlaiduma versiju.
Standarta bibliotēka
Ierobežota piekļuve failu sistēmai pa mapēm
Jauns tips os.Root nodrošina iespēju veikt failu sistēmas operācijas noteiktā mapē.
Funkcija os.OpenRoot atver mapi un atgriež os.Root. Metodes uz os.Root darbojas šajā mapē un neļauj ceļiem atsaukties uz vietām ārpus mapes, tostarp uz tām, kas ir sekojošas simboliskajām saitēm ārpus mapes. Metodes uz os.Root atspoguļo lielāko daļu failu sistēmas operāciju, kas pieejamas os paketē, tostarp piemēram, os.Root.Open, os.Root.Create, os.Root.Mkdir un os.Root.Stat.
Jauna testēšanas funkcija
Testi tagad var izmantot ātrāku un mazāk kļūdainu metodi testing.B.Loop lai veiktu iterācijas testam, piemēram, for b.Loop() { … } vietā parastām ciklu struktūrām ar b.N, piemēram, for range b.N. Tas piedāvā divus būtiskus ieguvumus:
- Testēšanas funkcija tiek izpildīta tieši vienu reizi katram -count, tādējādi dārgās uzstādīšanas un attīrīšanas darbības tiek veiktas tikai vienu reizi.
- Funkcijas izsaukuma parametri un rezultāti turpina dzīvot, novēršot kompilatora pilnīgu cikla ķermeņa optimizāciju.
Uzlaboti attīrītāji
Jauna funkcija runtime.AddCleanup ir pabeigšanas mehānisms, kurš ir elastīgāks, efektīvāks un mazāk pakļauts kļūdām nekā runtime.SetFinalizer. AddCleanup pieliec funkciju attīrīšanai pie objekta, kura tiks izsaukta, tiklīdz objekts kļūs nepieejams. Tomēr atšķirībā no SetFinalizer, vairāki attīrītāji var tikt pievienoti vienam objektam, attīrīšanas var tikt pievienotas iekšējiem rādītājiem, attīrīšanas parasti neizraisa noplūdes, kad objekti veido ciklus, un attīrīšanas nepārtrauc objekta vai objektu, uz kuriem tas norāda, atbrīvošanu. Jaunajam kodam vajadzētu dot priekšroku AddCleanup pār SetFinalizer.
Jauns weak pakets
Jauns weak pakets nodrošina vājus rādītājus.
Vāji rādītāji ir zema līmeņa primatīvs, kas nodrošina struktūru izveidi, kas efektīvi izmanto atmiņu, piemēram, vājus vārdnīcas, lai kartotu vērtības, kanonizācijas vārdnīcas jebkam, kas nav iekļauts paketē unique, un dažādām kešu formām. Lai atbalstītu šos lietošanas gadījumus, šis izlaidums arī nodrošina runtime.AddCleanup un maphash.Comparable.
Jauns crypto/mlkem pakotne
Jauns crypto/mlkem īsteno ML-KEM-768 un ML-KEM-1024.
ML-KEM ir post- kvantu atslēgu apmaiņas mehānisms, agrāk pazīstams kā Kyber un specifizēts FIPS 203.
Jauni crypto/hkdf, crypto/pbkdf2 un crypto/sha3 pakotnes
Jauns crypto/hkdf īsteno HMAC balstītu atslēgu iznākuma funkciju “Extract-and-Expand” HKDF, kā noteikts RFC 5869.
Jauns crypto/pbkdf2 īsteno paroles balstītu atslēgu iznākuma funkciju PBKDF2, kā noteikts RFC 8018.
Jauns crypto/sha3 īsteno SHA-3 un SHAKE hash funkcijas un cSHAKE paplašināšanas izejas funkcijas, kā noteikts FIPS 202.
Visas trīs pakotnes balstās uz iepriekšējiem golang.org/x/crypto pakotnēm....
FIPS 140-3 atbilstība
Šis izlaidums iekļauj jaunu mehānismu komplektu FIPS 140-3 atbilstības nodrošināšanai.
Go kriptogrāfiskais modulis ir iekšējo pakotņu kopums standartbibliotēkā, kas pārredzami tiek izmantots, lai ieviestu FIPS 140-3 apstiprinātus algoritmus. Lietojumprogrammas neprasa izmaiņas, lai izmantotu Go kriptogrāfisko moduli apstiprinātajiem algoritmiem.
Jauna GOFIPS140 vides mainīgā var tikt izmantota, lai izvēlētos Go kriptogrāfiskā moduļa versiju, ko izmantot kompilācijā. Jauna GODEBUG iestatījumi fips140 var tikt izmantota, lai iespējo FIPS 140-3 režīmu izpildes laikā.
Go 1.24 iekļauj Go kriptogrāfiskā moduļa versiju v1.0.0, kas šobrīd tiek testēta ar akreditētu CMVP laboratoriju.
Jauna eksperimentālā pakotne testing/synctest
Jauna eksperimentālā pakotne testing/synctest nodrošina atbalstu konkurentā koda testēšanai.
- Funkcija synctest.Run palaida grupu gorutīnu izolētā ‘izolācijā’. Izolācijā pakotnes funkcijas time darbojas uz viltus pulksteņiem.
- Funkcijas synctest.Wait gaida, kad visas gorutīnas tiks bloķētas pašreizējā izolācijā.
Sīkāku informāciju var redzēt pakotnes dokumentācijā.
Pakotne synctest ir eksperimentāla un jāiekļauj, iestādot GOEXPERIMENT=synctest. Pakotnes API var mainīties nākotnes izlaidumos. Var #67434 redzēt vairāk informācijas un sniegt atsauksmes.
Sīkās izmaiņas bibliotēkā
archive
Implementācijas (*Writer.AddFS) archive/zip un archive/tar tagad raksta mapes virsrakstu tukšai mapei.
bytes
Pakete bytes pievieno vairākas funkcijas, kas strādā ar iteratoriem:
- Lines atgriež iteratoru, kas sadalīts pa jauno rindu, kas ir masīvā ar baitiem.
- SplitSeq atgriež iterciju visiem apakšsērijām baitu sērijā, ko atdala separatora.
- SplitAfterSeq atgriež iterciju apakšsērijām baitu sērijā, kas ir sadalīta pēc katra separatora sastapšanās.
- FieldsSeq atgriež iterciju apakšsērijām baitu sērijā ap telpu simbolu secībām, kā definēts unicode.IsSpace
- FieldsFuncSeq atgriež iterciju apakšsērijām baitu sērijā ap Unicode koda punktu secībām, kas atbilst predikatam.
crypto/aes
Atgrieztā vērtība NewChipher vairs neimplementē metodes NewCTR, NewGCM, NewCBCEncrypter un NewCBCDecrypter. Šīs metodes nebija dokumentētas un nebija pieejamas visām arhitektūrām. Tagad vērtība Block jānodod tieši attiecīgajām funkcijām crypto/cipher. Pašlaik crypto/cipher joprojām pārbauda šīs metodes uz Block vērtībām, pat ja tās vairs nav atbalstītas standartbibliotēkā.
crypto/cipher
Jauna funkcija NewGCMWithRandomNonce atgriež AEAD, kas īsteno AES-GCM, ģenerējot nejaušu vienreizēju numuru Seal laikā un pievienojot to šifrētā teksta sākumā.
Realizācija Stream, atgriezta NewCTR izmantojot crypto/aes tagad ir daudz ātrāk amd64 un arm64.
NewOFB, NewCFBEncrypter un NewCFBDecrypter tagad ir atzīti par novecojušiem. OFB un CFB režīmi nav autentificēti, kas vispārējā gadījumā ļauj aktīviem uzbrukumiem manipulēt un atjaunot atklāto tekstu. Lietotnēm ieteicams lietot AEAD vietā. Ja neautentificēts režīms Stream ir nepieciešams, var izmantot NewCTR vietā.
crypto/ecdsa
PrivateKey.Sign tagad rada deterministisku parakstu saskaņā ar RFC 6979, ja nejaušības avots ir nil.
crypto/md5
Atgrieztā vērtība md5.New, tagad arī īsteno interfeisu encoding.BinaryAppender.
crypto/rand
Funkcija Lasīt tagad garantē neveiksmju neesamību. Ja Read sastop kļūdu lasīšanas laikā Reader, programma beigsies neatgriezeniski. Lūdzu, ņemiet vērā, ka noklusējuma Reader dokumentēts strādāt veiksmīgi, tāpēc šī izmaiņa ietekmēs tikai tās programmas, kuras pārraksta Reader mainīgo. Vienīgais izņēmums ir Linux kodoli līdz versijai 3.17, kur noklusējuma Reader joprojām atver /dev/urandom un var neizdoties.
Linux 6.11 un vēlāk Reader tagad izmanto sistēmas izsaukumu getrandom caur vDSO. Tas ir daudz ātrāk, parasti mazām lasījumam.
OpenBSD Reader tagad izmanto arc4random_buf(3).
Jauna funkcija Text tagad var ģenerēt kriptogrāfiski drošus nejaušus teksta virknes.
crypto/rsa
GenerateKey tagad atgriež kļūdu, ja pieprasīts atslēga ar garumu mazāku par 1024 bitiem. Visas metodes Sign, Verify, Encrypt un Decrypt tagad atgriež kļūdu, ja tās tiek izmantotas ar atslēgu, kas ir mazāka par 1024 bitiem. Šādas atslēgas nav drošas un tās nedrīkst izmantot. GODEBUG konfigurācija rsa1024min=0 atjauno iepriekšējo uzvedību, taču Go izstrādātāji iesaka to darīt tikai tad, kad tas ir nepieciešams, un tikai testos, piemēram, pievienojot rindu //go:debug rsa1024min=0 testu failā. Jaunais piemērs GenerateKey nodrošina viegli lietojamu standarta 2024 bitu testēšanas atslēgu.
Tagad ir droši un efektīvāk izsaukt PrivateKey.Precompute līdz PrivateKey.Validate. Precompute tagad ir ātrāks, ja ir daļēji aizpildīti PrecomputedValues, piemēram, izvelkot atslēgu no JSON.
Pakotne tagad noraida vairāk nepareizu atslēgu, pat ja Validate netiek izsaukts, un GenerateKey tagad var atgriezt jaunas kļūdas salauztām nejaušības avotiem. Lauki Primes un Precomputed struktūras PrivateKey tagad tiek izmantoti un validēti pat tad, ja daži vērtības trūkst. Tāpat ir izmaiņas crypto/x509 atslēgu RSA parsēšanā un iegūšanā, kā aprakstīts zemāk.
SignPKCS1v15 un VerifyPKCS1v15 tagad atbalsta SHA-512/224, SHA-512/256 un SHA-3.
GenerateKey tagad izmanto nedaudz atšķirīgu metodi privātā eksponēta ģenerēšanai (Karmīkla funkcija, nevis Eilera funkcija). Retām lietojumprogrammām, kas ārēji pāradresē atslēgas tikai no pirmajiem skaitļiem, var rasties dažādi, bet saderīgi rezultāti.
Operācijas ar publiskajām un privātajām atslēgām tagad ir līdz divām reizēm ātrākas wasm.
crypto/sha*
- crypto/sha1: vērtība, kas tiek atgriezta sha1.New tagad arī implementē saskarni encoding.BinaryAppender.
- crypto/sha256: vērtības, kas tiek atgrieztas sha256.New un sha256.New224 tagad arī implementē saskarni encoding.BinaryAppender.
- crypto/sha512: vērtības, kas tiek atgrieztas sha512.New, sha512.New384, sha512.New512_224 un sha512.New512_256, tagad arī implementē saskarni encoding.BinaryAppender.
crypto/subtle
Jauna funkcija WithDataIndependentTiming ļauj lietotājam izpildīt funkciju ar ieslēgtām, arhitektūrai specifiskām funkcijām, kas garantē, ka noteiktas instrukcijas attiecībā uz laiku ir nemainīgas. To var izmantot, lai pārliecinātos, ka kods, kas izstrādāts darbam ar konstantu laiku, nav optimizēts ar procesora līmeņa funkcijām tādā veidā, ka tas darbojas mainīgā laikā. Pašlaik WithDataIndependentTiming izmanto bitu PSTATE.DIT arm64 un neko nedara visās citās arhitektūrās. GODEBUG konfigurācija dataindependenttiming=1 aktivizē DIT režīmu visai Go programmai.
Izvade XORBytes ir jāpārklājas pilnībā vai vispār ne ar ievadi. Agrākais uzvedība citādi bija nenoteikta, bet tagad XORBytes izraisīs paniku.
crypto/tls
TLS serveris tagad atbalsta Encrypted Client Hello (ECH). Šo iespēju var aktivizēt, aizpildot laukumu Config.EncryptedClientHelloKeys.
Jauns post-kvantumu atslēgu apmaiņas mehānisms X25519MLKEM768 tagad tiek atbalstīts un ir ieslēgts pēc noklusējuma, kad Config.CurvePreferences ir nil. GODEBUG konfigurācija tlsmlkem=0 atgriež noklusējumu.
Atbalsts eksperimentālajai atslēgu apmaiņai X25519Kyber768Draft00 ir noņemts.
Atslēgu apmaiņas secība tagad tiek apstrādāta pilnībā ar crypto/tls pakotni. Secība Config.CurvePreferences tagad tiek ignorēta, un saturs tiek izmantots tikai, lai noteiktu, kuras atslēgu apmaiņas iespējas iekļaut, kad valstī ir aizpildīta.
Jauns lauks ClientHelloInfo.Extensions uzskaita paplašinājumu identifikatoru sarakstu, kas saņemti Client Hello ziņojumā. Tas var būt noderīgi TLS klientu pēdām.
crypto/x509
GODEBUG konfigurācija x509sha1 ir noņemts. Certficicate.Verify vairs neatbalsta SHA-1 balstītu parakstīšanu.
OID tagad īsteno saskarnes encoding.BinaryAppender un encoding.TextAppender.
Sertifikātu politiku noklusējuma lauks tika mainīts no Certificate.PolicyIdentifiers uz Certificate.Policies. Sertifikātu izpētes laikā abi lauki tiks aizpildīti, taču sertifikātu politiku izveidē tiks ņemti no lauka Certificate.Policies, nevis Certificate.PolicyIdentifiers. Šī izmaiņa var tikt atgriezta ar GODEBUG iestatījumu x509usepolicies=0.
CreateCertificate tagad ģenerēs sērijas numuru, izmantojot RFC 5280 atbilstošu metodi, nododot veidni Certificate.SerialNumber nil, nevis radot kļūdu.
Certificate.Verify tagad atbalsta politikas validāciju, kā definēts RFC 5280 un RFC 9618. Jauns lauks VerifyOptions.CertificatePolicies var tikt iestatīts uz pieņemamu politiku komplektu OIDs. Tik sertifikātu ķēdes ar derīgām politikas grafiem tiks atgrieztas no Certificate.Verify.
MarshalPKCS8PrivateKey tagad atgriež kļūdu, nevis izvelk nepareizu RSA atslēgu. (MarshalPKCS1PrivateKey nekas netiek atgriezts un tā uzvedība, ja tiek sniegtas nepareizas atslēgas, joprojām paliek nenoteikta.)
ParsePKCS1PrivateKey un ParsePKCS8PrivateKey tagad izmanto un validē kodētās CRT vērtības, tāpēc var noraidīt nepareizas RSA atslēgas, kas agrāk tika pieņemtas. Izmantojot GODEBUG iestatījumus x509rsacrt=0 atgriežas pie CRT vērtību pārrēķināšanas.
debug/elf
Pakete debug/elf pievieno atbalstu versiju apstrādei dinamiskajos ELF (izpildāmā un saistāmā formāta) failos. Jauna metode File.DynamicVersions atgriež dinamisko versiju sarakstu, kas definēts ELF failā. Jauna metode File.DynamicVersionNeeds atgriež dinamisko versiju sarakstu, ko šis ELF fails prasa, kas ir definētas citos ELF objektos. Visbeidzot, jauni lauki Symbol.HasVersion un Symbol.VersionIndex norāda uz simbolu versiju.
encoding
Divi jauni interfeisi TextAppender un BinaryAppender tika ieviesti, lai pievienotu teksta vai bināro objekta attēlojumu bajtu sējumam. Šie interfeisi nodrošina tādu pašu funkcionalitāti kā TextMarshaler un BinaryMarshaler, bet vietā, lai katru reizi piešķirtu jaunu sējumu, tie tieši pievieno datus esošajam sējumam. Šie interfeisi tagad ir īstenoti standarta bibliotēkas tipiem, kas jau īsteno TextMarshaler un/vai BinaryMarshaler.
encoding/json
Sagrupējot struktūras lauku ar jaunu omitzero opciju, struktūras lauka tagā lauks tiks izlaists, ja tā vērtība ir nulle. Ja lauka tips ietver metodi IsZero() bool, tā tiks izmantota, lai noteiktu, vai vērtība ir nulle. Pretējā gadījumā vērtība būs nulle, ja tā ir nul iegūta vērtība tās tipam. Omicron lauka tags ir tīrāks un mazāk pakļauts kļūdām nekā omitempty, kad nodoms ir izlaist nulles vērtības. Īpaši, atšķirībā no omitempty, omitzero izslēdz nulles time.Time vērtības, kas ir bieži problēmu avots.
Ja abi omitempty un omitzero ir norādīti, lauks tiks izlaists, ja vērtība ir tukša vai nulles (vai uzreiz kopā).
UnmarshalTypeError.Field tagad ietver iebūvētas struktūras, lai sniegtu detalizētākas kļūdu ziņojumu.
go/types
Visas datu struktūras go/types, kas atklāj pāru metodes secību, piemēram, Len() int un At(int) T, tagad arī ir metodes, kas atgriež iterators, ļaujot vienkāršot kodu, piemēram, šādu:
params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
Uz šo:
for param := range fn.Signature().Params().Variables() { use(param) }
Metodes: 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: vērtība, kas tiek atgriezta New, tagad arī īsteno interfeisu encoding.BinaryAppender
- hash/crc32: vērtības, kas tiek atgrieztas New un NewIEEE, tagad arī implementē saskarni encoding.BinaryAppender
- hash/crc64: vērtība, kas tiek atgriezta New, tagad arī īsteno interfeisu encoding.BinaryAppender
- hash/fnv: vērtības, kas tiek atgrieztas New32 New32a New64 New64a New128 un New128a, tagad arī implementē saskarni encoding.BinaryAppender
- hash/maphash: jaunas funkcijas Comparable un WriteComparable var aprēķināt hash jebkurai vērtībai, kuru var salīdzināt. Tas ļauj hashēt visu, ko var izmantot kā go vārdnīcas atslēgu.
log/slog
CSIStorageCapacity DiscardHandler ir apstrādātājs, kas nekad nav ieslēgts un vienmēr noraida savu iznākumu.
Līmenis un LevelVar tagad ievieš interfeisu encoding.TextAppender.
math/*
- math/big: Float, Int un Rat tagad ievieš interfeisu encoding.TextAppender.
- math/rand: novecojusi augsta līmeņa funkcijas izsaukumi Seed vairs nav nekāda efekta. Lai atjaunotu veco uzvedību, var izmantot GODEBUG iestatījumu randseednop=0. Vairāk konteksta iekš piedāvājumā 67273.
- math/rand/v2: ChaCha8 un PCG tagad ievieš interfeisu encoding.BinaryAppender.
net
ListenCondig tagad automātiski izmanto MPTCP sistēmās, kurās tas tiek atbalstīts (pašlaik tikai Linux).
IP tagad ievieš interfeisu encoding.TextAppender.
net/http
Mainījies ierobežojums Transport uz saņemtajiem atbildēm 1xx kā atbilde uz pieprasījumu. Agrāk tas pārtrauca pieprasījumu un atgrieza kļūdu pēc tam, kad tika saņemtas vairāk nekā 5 atbildes 1xx. Tagad tas atgriezīs kļūdu tikai tad, ja visu 1xx atbilžu kopējais izmērs pārsniedz konfigurācijas iestatījumu Transport.MaxResponseHeaderBytes.
Turklāt, kad pieprasījumam ir uzraudzības āķis net/http/httptrace.ClientTrace.Got1xxResponse, tagad nav ierobežojuma uz kopējo atbilžu skaitu 1xx. Āķis Got1xxResponse var atgriezt kļūdu, lai pārtrauktu pieprasījumu.
Transport un Serveris tagad ir HTTP2 lauks, kas ļauj konfigurēt HTTP/2 protokola iestatījumus.
Jauni lauki Server.Protocols un Transport.Protocols nodrošina vienkāršu veidu, kā konfigurēt, kuri protokoli HTTP serveris vai klients izmanto.
Serveris un klients var tikt konfigurēti, lai atbalstītu nezašifrētus HTTP/2 savienojumus.
Kad Server.Protocols saturs UnencryptHTTP2, serveris pieņems HTTP/2 savienojumus uz nezašifrētiem portiem. Serveris var vienlaicīgi pieņemt gan HTTP/1, gan nezašifrētu HTTP/2 uz vienu un to pašu portu.
Kad Transport.Protocols satur UnencryptedHTTP2 un nesatur HTTP1, transportā tiks izmantots nezašifrēts HTTP/2 adresēm http://. Ja transporta konfigurēšana paredz vienlaicīgu HTTP/1 un nešifrētu HTTP/2 lietošanu, tas izmantos HTTP/1.
Atbalsts nešifrētam HTTP/2 izmanto "HTTP/2 ar priekšzināšanām" (RFC 9113, 3.3. nodaļa). Novecojusi virsraksts "Upgrade: h2c" netiek atbalstīta.
net/netip
Addr, AddrPort un Prefix tagad īsteno saskarnes encoding.BinaryAppender un encoding.TextAppender.
net/url
URL tagad arī implementē saskarni encoding.BinaryAppender.
os/user
Windows Current tagad var tikt izmantots Windows Nano Server. Realizācija tika atjaunināta, lai izvairītos no funkciju izmantošanas no bibliotēkas NetApi32, kas nav pieejama Nano Server.
Windows Current, Lookup un LookupId tagad atbalsta šādus iebūvētos lietotāja pakalpojumu kontus:
- NT AUTHORITYSYSTEM
- NT AUTHORITYLOCAL SERVICE
- NT AUTHORITYNETWORK SERVICE
Windows Current bija būtiski paātrināta, kad pašreizējais lietotājs pievienojas lēnam domēnam, kas ir izplatīts daudziem korporatīvajiem lietotājiem. Jaunā realizācijas veiktspēja tagad ir milisekundēs, salīdzinot ar iepriekšējo versiju, kurai bija nepieciešamas vairākas sekundes, pat minūtes, lai pabeigtu.
Windows Current tagad atgriež procesa īpašnieka lietotāju, kad pašreizējā plūsma izsniedz sevi kā citu lietotāju. Agrāk tas atgrieza kļūdu.
regexp
Regexp tagad ievieš interfeisu encoding.TextAdapter.
runtime
Funkcija GOROOT tagad ir pasludināta par novecojusi. Jaunajā kodā jāpiedod priekšroka sistēmas ceļam bināro failu "go" noteikšanā un jāizmanto go env GOROOT, lai noteiktu GOROOT.
strings
Pakete strings pievieno vairākas funkcijas darbu ar iteratoriem:
- Lines atgriež iteratoru, kas šķiro pārtraukumus pa jauniem līniju simboliem virknes tekstā.
- SplitSeq atgriež iteratoru visām apakšvirknēm virknes, kas šķirtas ar separatoru.
- SplitAfterSeq atgriež iteratoru pa apakšvirknēm virknes, kas šķirtas pēc katra separatora sastopamības.
- FieldsSeq atgriež iteratoru pa apakšvirknēm virknes ap simbolu atstarpiem, kā noteiktsunicode.IsSpace
- FieldsFuncSeq atgriež iteratoru pēc apakšvirknēm virknes ap Unicode kodu punktu secībām, kas izpilda predikātu.
sync
Realizācija sync.Map tika mainīta, uzlabojot veiktspēju, īpaši vārdnīcas izmaiņām. Piemēram, nepārklājoša komplektu izmaiņu konkurence tagad ir mazāk iespējama lielās vārdnīcās, un nav nepieciešama laika palielināšana, lai sasniegtu zemas konkurences vārdnīcu slodzi.
Ja, ja saskarsieties ar jebkādām problēmām, uzstādiet GOEXPERIMENT=nosynchashtriemap kompilācijas laikā, lai atgrieztos pie vecās īstenošanas, lūdzu, aizpildiet problēmu veidlapu.
testing
Jaunas metodes T.Context un B.Context atgriež kontekstu, kas tiek atcelts pēc testēšanas pabeigšanas un pirms testēšanas tīrīšanas funkciju izpildes.
Jaunas metodes T.Chdir un B.Chdir var tikt izmantoti darba direktorijas maiņai testēšanas vai veiktspējas vērtējuma laikā.
text/template
Veidnes tagad atbalsta range-over-func un range-over-int.
time
Laiks tagad īsteno saskarnes encoding.BinaryAppender un encoding.TextAppender.
Ports
Linux
Kā bija paziņots Go 1.23 izlaišanas piezīmēs Go 1.24 prasa Linux kodolu versiju 3.2 vai jaunāku.
Darvīna
Go 1.24 ir jaunākais izlaidums, kas darbosies macOS 11 Big Sur. Go 1.25 prasīs macOS 12 Monterey vai jaunāku.
WebAssembly
Kompilācijas direktīva go:wasmexport ir pievienota Go programmām, lai eksportētu funkcijas uz WebAssembly mitinātāju.
WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 atbalsta Go programmas izveidi kā reactor/library norādot kompilācijas karogu -buildmode=c-shared.
Tagad ir atļauti vairāk veidu kā argumenta vai rezultāta veids go:wasmimport funkcijām. Īpaši, bool, string, uintptr un rādītāji uz noteiktiem veidiem ir atļauti (sīkāk skatiet dokumentācijā), kopā ar 32-bit un 64-bit veselo skaitļu un peldošā punkta veidiem, kā arī unsafe.Pointer, kas jau ir atļauts. Šie veidi arī ir atļauti kā argumenta vai rezultāta veidi go:wasmexport funkcijām.
WebAssembly atbalsta faili ir pārvietoti uz lib/wasm no misc/wasm.
Sākotnējā atmiņas izmērs ir ievērojami samazināts, īpaši maziem WebAssembly lietojumiem.
Windows
32-bit windows/arm ports (GOOS=windows GOARCH=arm) ir atzīts par bojātu. Sīkāka informācija atrodama #70705
Avots: linux.org.ru
