'n Nuwe weergawe van die Go-taal, weergawe 1.24, kom ses maande daarna Gaan 1.23. Die meeste van die veranderinge is in die implementering van die toolchain, runtime en biblioteke. Soos altyd bied die vrystelling belofte van verenigbaarheid Go 1. Die taalontwerpers verwag dat byna alle Go-programme sal voortgaan om saam te stel en te loop soos voorheen.
Taal verander
Go 1.24 ondersteun nou ten volle generiese tipe aliasse: 'n tipe alias kan geparameteriseer word as 'n verklaarde tipe. Besonderhede in taal spesifikasies. Vir nou kan hierdie kenmerk gedeaktiveer word deur GOEXPERIMENT=noaliastypeparams in te stel; Die aliastypeparams-opsie sal egter verwyder word in Go 1.25.
Tools
Gaan bevel
Go-modules kan nou uitvoerbare afhanklikhede opspoor deur gebruik te maak van die instrument-aanwysing in go.mod. Dit verwyder die behoefte aan die vorige oplossing om nutsgoed as leë invoere by te voeg in 'n lêer wat tipies "tools.go" genoem word. Die go tool-opdrag kan nou hierdie gereedskap uitvoer bykomend tot die gereedskap wat saam met Go kom. Meer inligting kan gevind word by dokumentasie.
Die nuwe -tool-vlag vir go get veroorsaak dat gereedskapaanwysings by die huidige module gevoeg word vir die gespesifiseerde pakkette, benewens die byvoeging van vereiste riglyne.
New meta-patroon hulpmiddel verwys na alle gereedskap in die huidige module. Dit kan gebruik word om hulle almal op te dateer via die go get-nutsding, of om dit in jou GOBIN-gids te installeer via die go install-nutsding.
Uitvoerbare items wat via go run en die nuwe go-nutsdinggedrag geskep is, word nou in die Go build-kas gekas. Dit maak herhaalde bekendstellings moontlik as gevolg van die verhoogde kas. #69290.
Die gaan bou en gaan installeer-opdragte aanvaar nou die -json-vlag, wat bou-uitvoer en foute as gestruktureerde JSON-uitvoer op standaarduitvoer rapporteer. Formaatbesonderhede kan in go help buildjson gesien word.
Verder, gaan toets -json rapporteer nou die uitvoer- en boufoute in JSON, gemeng met die toetsresultaat JSON. Hulle kan onderskei word deur die nuwe Aksie-tipes, maar as hulle probleme in die toetsintegrasiestelsel veroorsaak, kan jy terugval na die teksuitvoer van die bou via GODEBUG-opstelling gotestjsonbuildtext=1.
Die nuwe GOAUTH-omgewingsveranderlike bied 'n buigsame manier om private module-trekkings te magtig. Jy kan besonderhede in go help goauth sien.
Die go build-opdrag is nou geïnstalleer weergawe van die hoofmodule in die saamgestelde binêre, gebaseer op 'n merker en / of 'n weergawe beheer commit. Die +vuil agtervoegsel sal bygevoeg word as daar onverbonde veranderinge is. Die -buildvcs=false vlag kan gebruik word om weergawebeheerinligting van die binêre weg te laat.
New GODEBUG-opstelling toolchaintrace=1 kan nou gebruik word om die gereedskapskettingseleksieproses in die go-opdrag op te spoor.
Cgo
Cgo ondersteun nuwe aantekeninge vir C-funksies om werkverrigting te verbeter. #cgo noescape cFunctionName vertel die samesteller dat die geheue wat na die C-funksie cFunctionName oorgedra is, nie ontsnap is nie. #cgo nocallback cFunctionName vertel die samesteller dat die C-funksie cFunctionName geen Go-funksies terugroep nie. Meer inligting kan gevind word by cgo dokumentasie.
Cgo weier tans om oproepe saam te stel na 'n C-funksie wat verskeie onversoenbare verklarings het. Byvoorbeeld, as f verklaar word as beide void f(int) en void f(double), sal cgo 'n fout rapporteer in plaas daarvan om moontlik 'n ongeldige roepvolgorde f(0) te genereer. Nuut in hierdie vrystelling is verbeterde opsporing van hierdie fouttoestand wanneer onversoenbare verklarings in verskillende lêers verskyn. #67699.
Objdump
Die objdump-instrument ondersteun nou demontage op 64-bis LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) en S390X (GOARCH=s390x).
Vet
Die nuwe toetsontleder rapporteer algemene foute in toets-, fuzzer-, maatstaf- en voorbeeldverklarings in toetssuites, soos misvormde name, ongeldige handtekeninge of voorbeelde wat nie-bestaande identifiseerders dokumenteer. Sommige van hierdie foute kan veroorsaak dat toetse misluk.
Die bestaande printf-ontleder rapporteer nou diagnostiek vir oproepe van die vorm fmt.Printf(s), waar s 'n nie-konstante formaatstring is met geen ander argumente nie. Sulke oproepe is byna altyd 'n fout, aangesien die waarde van s die % karakter kan bevat; gebruik eerder fmt.Print. 60529. Hierdie kontrole is geneig om dinge in bestaande kode te vind, en word dus slegs toegepas wanneer die taalweergawe (soos gespesifiseer deur die go-aanwysing van die go.mod-lêer of die `//go:build`-kommentaar) ten minste Go 1.24 is, om te verhoed dat lang integrasieonderbrekings veroorsaak word wanneer na die Go 1.24-nutsmiddelketting opgegradeer word.
Die bestaande buildtag-ontleder rapporteer nou diagnostiek wanneer daar 'n verkeerde buildtag is ouer weergawe bou beperking Gaan in die //go:bou-riglyne. Byvoorbeeld, //go:build go1.23.1 verwys na 'n puntvrystelling; gebruik eerder //go:build go1.23. #64127.
Die bestaande kopieslot-ontleder rapporteer nou 'n diagnose wanneer 'n veranderlike in 'n driedubbele "vir"-lus verklaar word, soos vir i := iter(); gedoen(i); i = next(i) { … }, bevat sync.Locker, soos sync.Mutex. Gaan 1.22 die gedrag van sulke lusse verander om 'n nuwe veranderlike vir elke iterasie te skep, deur die waardes van die vorige iterasie te kopieer; Hierdie kopiëring is nie veilig vir slotte nie. #66387.
GOCACHEPROG
Die interne cmd/go-binêre en toetskasmeganisme kan nou geïmplementeer word deur kinderprosesse wat 'n JSON-protokol implementeer tussen die cmd/go-instrument en die kinderproses wat deur die GOCACHEPROG-omgewingsveranderlike genoem word. Voorheen was dit vir GOEXPERIMENT. Besonderhede van die protokol kan gesien word in dokumentasie.
Tyd van voltooiing
Verskeie prestasieverbeterings in die looptyd het SVE-bokoste met gemiddeld 2-3% verminder oor 'n stel verteenwoordigende maatstawwe. Resultate kan verskil afhangende van die toepassing. Hierdie verbeterings sluit in 'n nuwe ingeboude kaartimplementering gebaseer op Sweedse tabelle, meer doeltreffende toekenning van klein voorwerp geheue, en 'n nuwe interne runtime implementering van die mutex.
Die nuwe ingeboude kaartimplementering en die nuwe interne runtime mutex kan gedeaktiveer word deur onderskeidelik GOEXPERIMENT=noswissmap en GOEXPERIMENT=nospinbitmutex op boutyd te stel.
Samesteller
Die samesteller het reeds verbied om nuwe metodes te definieer met ontvangertipes wat deur cgo gegenereer is, maar dit was moontlik om hierdie beperking deur middel van 'n tipe alias om te werk. Go 1.24 rapporteer nou altyd 'n fout as die ontvanger 'n cgo-gegenereerde tipe aandui, hetsy direk of indirek (via 'n tipe alias).
Koppelaar
Die koppelaar genereer nou 'n GNU-bou-identifiseerder (ELF-inskrywing NT_GNU_BUILD_ID) op ELF-platforms en 'n UUID (Mach-O laai-opdrag LC_UUID) op macOS by verstek. Die bou-ID of UUID is afgelei van die Go-bou-ID. Dit kan afgeskakel word met die -B geen koppelaarvlag, of vervang word met die -B 0xNNNN koppelaarvlag met 'n gebruiker-gespesifiseerde heksadesimale waarde.
Bevordering
Soos vermeld in Gaan 1.22 vrystelling notas, Go 1.24 vereis nou Go 1.22.6 of later om geïnstalleer te word. Die ontwikkelaars verwag dat Go 1.26 'n puntvrystelling van Go 1.24 of later sal vereis om uitgerol te word.
Standaard Biblioteek
Gidsbeperkte lêerstelseltoegang
Nuwe tipe os.wortel Bied die vermoë om lêerstelselbewerkings binne 'n spesifieke gids uit te voer.
Funksie os.OpenRoot maak die gids oop en keer terug os.wortel. Metodes op os.wortel werk in daardie gids en laat nie toe dat paaie na liggings buite die gids verwys nie, insluitend dié wat simboliese skakels buite die gids volg. Die metodes op os.Root weerspieël die meeste van die lêerstelsel-bewerkings wat in die OS-pakket beskikbaar is, insluitend, byvoorbeeld, os.Root.Open, os.Root.Create, os.Root.Mkdir и os.Root.Stat.
Nuwe maatstaf funksie
Maatstawwe kan nou 'n vinniger, minder foutgevoelige metode gebruik toetsing.B.Loop om oor 'n maatstaf te herhaal soos vir b.Loop() { … } in plaas van die tipiese lusstrukture wat bN behels soos vir reeks bN Dit bied twee beduidende voordele:
- Die maatstaffunksie word presies een keer per telling uitgevoer, dus word die duur opstel- en skoonmaakstappe net een keer uitgevoer.
- Die funksie-oproepparameters en resultate leef voort, wat verhoed dat die samesteller die lusliggaam heeltemal optimaliseer.
Verbeterde finaliseerders
Nuwe funksie runtime.AddCleanup is 'n voltooiingsmeganisme wat meer buigsaam, meer doeltreffend en minder foutgevoelig is as runtime.SetFinalizer. AddCleanup heg 'n opruimfunksie aan 'n voorwerp wat uitgevoer sal word sodra die voorwerp nie beskikbaar is nie. In teenstelling met SetFinalizer, kan veelvuldige opruimings egter aan 'n enkele voorwerp geheg word, opruimings kan aan interne wysers geheg word, opruimings veroorsaak nie tipies lekkasies wanneer voorwerpe 'n siklus vorm nie, en opruimings vertraag nie die toewysing van die voorwerp of voorwerpe waarna dit verwys nie. Nuwe kode moet AddCleanup bo SetFinalizer verkies.
Nuwe swak pakkie
Nuwe pakkie swak verskaf swak aanwysings.
Swak wysers is 'n lae-vlak primitief wat voorsien word vir die skep van geheue-doeltreffende strukture soos swak woordeboeke vir kartering van waardes, kanoniseringswoordeboeke vir enigiets wat nie deur 'n pakket gedek word nie. unieke, en verskeie tipes kas. Om hierdie gebruiksgevalle te ondersteun, bied hierdie vrystelling ook runtime.AddCleanup и maphash.Vergelykbaar.
Nuwe crypto/mlkem-pakket
Nuwe pakkie kripto/mlkem implemente ML-KEM-768 en ML-KEM-1024.
ML-KEM is 'n post-kwantum sleutel uitruilmeganisme, voorheen bekend as Kyber en gespesifiseer in FIPS 203.
Nuwe pakkette crypto/hkdf, crypto/pbkdf2 en crypto/sha3
Nuwe pakkie kripto/hkdf implementeer die HMAC-gebaseerde "Extract-and-Expand" sleutel afleidingsfunksie HKDF soos gedefinieer in RFC 5869.
Nuwe pakkie crypto/pbkdf2 implementeer die wagwoordgebaseerde sleutelafleidingsfunksie PBKDF2 soos gedefinieer in RFC 8018.
Nuwe pakkie kripto/sha3 implementeer die SHA-3 hash-funksie en die SHAKE- en cSHAKE-uitbreidbare uitvoerfunksies soos gedefinieer in FIPS 202.
Al drie pakkette is gebaseer op die bestaande golang.org/x/crypto/… pakkette.
FIPS 140-3 Voldoening
Hierdie vrystelling sluit in 'n nuwe stel meganismes om FIPS 140-3-nakoming te verseker.
Die Go crypto module is 'n stel interne standaard biblioteek pakkette wat deursigtig gebruik word om FIPS 140-3 goedgekeurde algoritmes te implementeer. Aansoeke vereis nie veranderinge om die Go-kriptomodule vir goedgekeurde algoritmes te gebruik nie.
Die nuwe omgewingsveranderlike GOFIPS140 kan gebruik word om die weergawe van die Go-kriptomodule te kies om in 'n bou te gebruik. Nuut GODEBUG-opstelling fips140 kan gebruik word om FIPS 140-3-modus tydens looptyd te aktiveer.
Go 1.24 sluit die Go-kripto-module v1.0.0 in, wat tans met 'n CMVP-geakkrediteerde laboratorium getoets word.
Nuwe eksperimentele pakkettoets/sinctoets
Nuwe eksperimentele pakket toets/sinctest Bied ondersteuning vir die toets van gelyktydige kode.
- Funksie synctest.run hardloop 'n groep goroutines in 'n geïsoleerde "borrel". In die borrel van die pakket funksie tyd werk op vals horlosies.
- Funksies synctest.wag wag totdat alle goroutines in die huidige borrel geblokkeer is.
Besonderhede kan in die pakketdokumentasie gevind word.
Die sinctest-pakket is eksperimenteel en moet geaktiveer word deur GOEXPERIMENT=sinctest te stel. Die pakket-API kan in toekomstige uitgawes verander. IN #67434 Jy kan meer besonderhede sien en terugvoer gee.
Klein veranderinge in die biblioteek
argief
Die (*Writer.AddFS) implementerings in argief/zip en argief/tar skryf nou die gidsopskrif vir 'n leë gids.
grepe
pakket grepe voeg verskeie funksies by wat met iterators werk:
- Lines Wys 'n iterator oor nuwelyngeskeide stringe in 'n greepsny.
- SplitSeq gee 'n iterator terug oor alle subsnye van 'n greepskyf geskei deur 'n skeier.
- SplitAfterSeq gee 'n iterator terug oor die subsnye van 'n greepskyf, verdeel na elke voorkoms van die skeier.
- FieldsSeq gee 'n iterator terug oor subsnye van 'n greepskyf rondom rye spasiekarakters, soos gedefinieer unicode.IsSpace
- FieldsFuncSeq gee 'n iterator terug oor subsnye van 'n greepskyf rondom rye van Unicode-kodepunte wat aan 'n predikaat voldoen.
kripto/aes
Retourwaarde NewChipher implementeer nie meer die NewCTR, NewGCM, NewCBCEncrypter en NewCBCDecrypter metodes nie. Hierdie metodes was ongedokumenteer en nie op alle argitekture beskikbaar nie. Nou die betekenis Blok moet direk na die toepaslike funksies oorgedra word kripto/syfer. Tans kontroleer crypto/cipher steeds hierdie metodes op Blokwaardes, al word dit nie meer deur die standaardbiblioteek ondersteun nie.
kripto/syfer
Nuwe funksie NewGCMWithRandomNonce keer terug VOORAF, wat AES-GCM implementeer deur 'n ewekansige nonce tydens Seël te genereer en dit aan die syferteks voor te sit.
Implementering Stroom, teruggekeer NuweCTR wanneer dit gebruik word met kripto/aes nou 'n paar keer vinniger op amd64 en arm64.
NuweOFB, NewCFBEencrypter и NewCFBDecrypter is nou verouderd verklaar. OFB- en CFB-modusse is ongeverifieer, wat gewoonlik aktiewe aanvalle toelaat om gewone teks te manipuleer en te herstel. Aansoeke word aanbeveel om te gebruik VOORAF in ruil daarvoor. Indien ongeverifieerde modus Stroom nodig, gebruik kan word NuweCTR in ruil daarvoor.
kripto/ecdsa
PrivateKey.Sign skep nou 'n deterministiese handtekening volgens RFC 6979, as die willekeurigheidsbron nul is.
kripto/md5
Retourwaarde md5.nuut, implementeer nou ook die koppelvlak enkodering.binêre aanhanger.
kripto/rand
Funksie Lees waarborg nou geen mislukkings nie. As Lees 'n fout ondervind tydens lees Reader, sal die program permanent beëindig word. Let daarop dat die verstekleser gedokumenteer is om altyd suksesvol te werk, so hierdie verandering behoort slegs programme te raak wat die Reader-veranderlike ignoreer. Een uitsondering is Linux-pitte voor 3.17, waar die verstekleser steeds /dev/urandom oopmaak en kan misluk.
Op Linux 6.11 en later gebruik Reader nou die ewekansige stelseloproep via vDSO. Dit is 'n paar keer vinniger, gewoonlik vir klein leesstukke.
Op OpenBSD Reader gebruik nou arc4random_buf(3).
Nuwe funksie Teks kan nou kriptografies veilige ewekansige teksstringe genereer.
kripto/rsa
Genereer sleutel gee nou 'n fout terug as 'n sleutellengte van minder as 1024 bisse aangevra word. Alle Teken-, Verifieer-, Enkripteer- en Dekripteer-metodes gee nou 'n fout terug as dit gebruik word met 'n sleutelgrootte van minder as 1024 bisse. Sulke sleutels is onveilig en moet nie gebruik word nie. Stel GODEBUG op rsa1024min=0 herstel die ou gedrag, maar die Go-ontwikkelaars beveel aan om dit slegs te doen wanneer nodig en slegs in toetse, byvoorbeeld deur die reël //go:debug rsa1024min=0 by die toetslêer te voeg. Nuut Byvoorbeeld GenerateKey bied 'n maklik om te gebruik standaard 2024-bis toetssleutel.
Dit is nou veiliger en doeltreffender om te bel PrivateKey.Precompute aan PrivateKey.Valideer. Precompute is nou vinniger in die teenwoordigheid van gedeeltelik gevul Vooraf berekende waardes, byvoorbeeld wanneer 'n sleutel uit JSON onttrek word.
Die pakket verwerp nou meer ongeldige sleutels selfs wanneer Validate nie geroep word nie, en Genereer sleutel kan nou nuwe foute vir gebroke ewekansigheidsbronne terugstuur. Velde primes и Vooraf bereken die struktuur Privaat Sleutel word nou gebruik en bekragtig selfs wanneer sommige waardes ontbreek. Daar is ook veranderinge aan crypto/x509 vir die ontleding en onttrekking van RSA-sleutels, wat hieronder beskryf word.
TekenPKCS1v15 и Verifieer PKCS1v15 ondersteun nou SHA-512/224, SHA-512/256 en SHA-3.
Genereer sleutel gebruik nou 'n effens ander metode om die private eksponent te genereer (Carmichael-funksie in plaas van Euler-funksie). Skaars toepassings wat sleutels ekstern hergenereer uit slegs priemgetalle kan verskillende maar versoenbare resultate lewer.
Bewerkings op publieke en private sleutels is nou tot twee keer vinniger op wasm.
kripto/sha*
- kripto/sha1: terugkeer waarde sha1.Nuut implementeer nou ook die koppelvlak enkodering.binêre aanhanger.
- kripto/sha256: waardes teruggestuur sha256.Nuut и sha256.Nuut224 implementeer nou ook die koppelvlak enkodering.binêre aanhanger.
- kripto/sha512: waardes teruggestuur sha512.Nuut, sha512.Nuut384, sha512.Nuwe512_224 и sha512.Nuwe512_256, implementeer nou ook die koppelvlak enkodering.binêre aanhanger.
kripto/subtiel
Nuwe funksie WithDataIndependentTiming laat die gebruiker toe om 'n funksie uit te voer met argitektuurspesifieke kenmerke geaktiveer wat verseker dat sekere instruksies nie verander word relatief tot die tyd van die datawaarde nie. Dit kan gebruik word om te verseker dat kode wat geskryf is om in konstante tyd te loop, nie deur verwerkervlakfunksies geoptimaliseer is sodat dit in veranderlike tyd loop nie. Tans gebruik WithDataIndependentTiming die PSTATE.DIT-bis op arm64 en doen niks op alle ander argitekture nie. Stel GODEBUG op dataindependenttiming=1 aktiveer DIT-modus vir die hele Go-program.
Output XORBytes moet heeltemal of glad nie met die insette oorvleuel nie. Voorheen was die gedrag andersins ongedefinieer, terwyl XORBytes nou paniekerig sal raak.
kripto/tls
Die TLS-bediener ondersteun nou Encrypted Client Hello (ECH). Hierdie kenmerk kan geaktiveer word deur die veld in te vul. Config.EncryptedClientHelloKeys.
'n Nuwe post-kwantum sleuteluitruilmeganisme X25519MLKEM768 nou ondersteun en geaktiveer by verstek wanneer Config.CurvePreferences is nul. Stel GODEBUG op tlsmlkem=0 gee verstek terug.
Ondersteuning vir die eksperimentele X25519Kyber768Draft00-sleuteluitruiling is verwyder.
Die sleuteluitruilbestelling word nou heeltemal deur die crypto/tls-pakket hanteer. Bestel Config.CurvePreferences word nou geïgnoreer en die inhoud word slegs gebruik om te bepaal watter sleuteluitruilings om in te sluit wanneer die veld ingevul word.
Nuwe veld ClientHelloInfo.Uitbreidings Lys die lys uitbreiding-identifiseerders wat in die Client Hallo-boodskap ontvang is. Dit kan nuttig wees vir vingerafdrukke van TLS-kliënte.
crypto/x509
Stel GODEBUG op x509sha1 is verwyder. Sertifisering.Verifieer ondersteun nie meer SHA-1-gebaseerde handtekeninge nie.
OID implementeer nou koppelvlakke enkodering.binêre aanhanger и encoding.TextAppender.
Die versteksertifikaatbeleidveld is verander vanaf Sertifikaat.PolicyIdentifiers op Sertifikaat.Beleide. Wanneer sertifikate ontleed word, sal beide velde gevul word, maar wanneer 'n sertifikaatbeleid geskep word, sal hulle uit die Certificate.Policies-veld geneem word in plaas van Certificate.PolicyIdentifiers. Hierdie verandering kan teruggedraai word. GODEBUG-opstelling x509gebruikbeleid=0.
Skep Sertifikaat sal nou 'n reeksnommer genereer deur 'n RFC 5280-voldoende metode te gebruik wanneer 'n sjabloonveld deurgegee word Sertifikaat.Reeksnommer nul, in plaas daarvan om te verongeluk.
Sertifikaat.Verifieer ondersteun nou beleidsvalidering soos gedefinieer in RFC 5280 en RFC 9618. Nuwe veld VerifyOptions.CertificatePolicies kan op 'n aanvaarbare stel beleide gestel word OID's. Slegs sertifikaatkettings met geldige polisgrafieke sal van teruggestuur word Sertifikaat.Verifieer.
MarshalPKCS8PrivateKey gee nou 'n fout terug in plaas daarvan om 'n ongeldige RSA-sleutel terug te haal. (MarshalPKCS1PrivateKey het geen foutopgawe nie en sy gedrag wanneer ongeldige sleutels verskaf word, bly ongedefinieerd.)
OntleedPKCS1Privaatsleutel и OntleedPKCS8Privaatsleutel gebruik en valideer nou geënkodeerde CRT-waardes, dus kan ongeldige RSA-sleutels wat voorheen aanvaar is, verwerp. Gebruik GODEBUG instellings x509rsacrt=0 keer terug na herberekening van CRT-waardes.
ontfout/elf
pakket ontfout/elf Voeg ondersteuning by vir die hantering van simboolweergawes in dinamiese ELF-lêers (uitvoerbare en koppelbare formaat). Nuwe metode File.DynamicVersions Wys 'n lys van dinamiese weergawes wat in 'n ELF-lêer gedefinieer is. Nuwe metode File.DynamicVersionNeeds Wys 'n lys van dinamiese weergawes wat deur hierdie ELF-lêer vereis word wat in ander ELF-voorwerpe gedefinieer is. Ten slotte, nuwe velde Simbool.HasVersion и Symbol.VersionIndex dui die weergawe van die simbool aan.
encoding
Twee nuwe koppelvlakke TextAppender и BinaryAppender is ingestel om 'n teks of binêre voorstelling van 'n voorwerp by 'n greepsny te voeg. Hierdie koppelvlakke bied dieselfde funksionaliteit as TextMarshaler и Binary Marshaler, maar in plaas daarvan om elke keer 'n nuwe sny toe te ken, voeg hulle data direk aan 'n bestaande sny toe. Hierdie koppelvlakke word tans geïmplementeer deur standaard biblioteektipes wat reeds TextMarshaler en/of BinaryMarshaler implementeer.
enkodering/json
Wanneer gebou word, sal 'n struktuurveld met die nuwe omitzero-opsie in die struktuurveldmerker weggelaat word as die waarde nul is. As die veldtipe 'n IsZero() bool-metode het, sal dit gebruik word om te bepaal of die waarde nul is. Andersins sal die waarde nul wees as dit nulwaarde vir sy tipe. Die omitzero-veldmerker is skoner en minder foutgevoelig as weglating wanneer die bedoeling is om nulwaardes weg te laat. In die besonder, anders as weglating, laat omitzero nulle weg tyd.tyd waardes, wat 'n algemene bron van probleme is.
As beide omitempty en omitzero gespesifiseer word, sal die veld weggelaat word as die waarde leeg of nul is (of albei).
UnmarshalTypeError.Field sluit nou ingeboude strukture in om meer gedetailleerde foutboodskappe te verskaf.
gaan/tipes
Alle go/tipes datastrukture wat reekse van pare metodes blootstel, soos Len() int en At(int) T, het nou ook metodes wat iterators terugstuur, wat eenvoudiger kode soos hierdie moontlik maak:
params := fn.Type.(*tipes.Signature).Params() vir i := 0; i < params.Len(); i++ { use(params.At(i)) }
Op hierdie een:
vir param := reeks fn.Signature().Params().Variables() { use(param) }
Metodes: Interface.EmbeddedTypes Interface.ExplicitMethods Interface.Metodes MethodSet.Methods Benoem.Metodes Omvang.Kinders Struktuur.Velde Tupel.Veranderlikes TypeList.Types TypeParamList.TypeParams Unie.Bepalings
hash/*
- hash/adler32: terugkeer waarde Nuut, implementeer nou ook die koppelvlak enkodering.binêre aanhanger
- hash/crc32: waardes teruggestuur Nuut и NuweIEEE, implementeer nou ook die koppelvlak enkodering.binêre aanhanger
- hash/crc64: terugkeer waarde Nuut, implementeer nou ook die koppelvlak enkodering.binêre aanhanger
- hash/fnv: waardes teruggestuur New32 Nuut 32a New64 Nuut 64a New128 и Nuut 128a, implementeer nou ook die koppelvlak enkodering.binêre aanhanger
- hash/maphash: nuwe kenmerke vergelykbaar и SkryfVergelykbaar kan die hash van enige waarde wat vergelyk kan word, bereken. Dit laat jou toe om enigiets te hash wat as 'n Go-woordeboeksleutel gebruik kan word.
log/slog
New GooiHandler is 'n hanteerder wat nooit geaktiveer is nie en altyd die uitvoer daarvan weggooi.
Vlak и LevelVar implementeer nou die koppelvlak encoding.TextAppender.
wiskunde/*
- wiskunde/groot: float, Int и Rat implementeer nou die koppelvlak encoding.TextAppender.
- wiskunde/rand: afgekeurde topvlak funksie oproepe Saad geen effek meer het nie. Om die ou gedrag te herstel, kan jy gebruik GODEBUG-opstelling randsaadnop=0. Meer konteks in aanbod 67273.
- wiskunde/rand/v2: ChaCha8 и PCG implementeer nou die koppelvlak enkodering.binêre aanhanger.
netto
LuisterCondig gebruik nou MPTCP by verstek op stelsels waar dit ondersteun word (tans net Linux).
IP implementeer nou die koppelvlak encoding.TextAppender.
net/http
Die beperking het verander vervoer op die ontvangde 1xx inligting antwoorde in reaksie op die versoek. Voorheen sou dit die versoek stop en 'n fout terugstuur nadat meer as 5 1xx-antwoorde ontvang is. Dit gee nou slegs 'n fout as die totale grootte van alle 1xx-antwoorde die konfigurasie-instelling oorskry Transport.MaxResponseHeaderBytes.
Ook wanneer 'n versoek 'n opsporingshaak het net/http/httptrace.ClientTrace.Got1xxResponse, nou is daar geen beperking op die totale aantal antwoorde 1xx. Die Got1xxResponse-haak kan 'n fout terugstuur om die versoek te stop.
vervoer и bediener het nou 'n HTTP2-veld wat konfigurasie van HTTP/2-protokolinstellings toelaat.
Nuwe velde Bediener.Protokolle и Vervoer.Protokolle bied 'n eenvoudige manier om te konfigureer watter HTTP-protokolle die bediener of kliënt gebruik.
Die bediener en kliënt kan gekonfigureer word om ongeënkripteerde HTTP/2-verbindings te ondersteun.
Wanneer Bediener.Protokolle bevat UnencrypterHTTP2, sal die bediener HTTP/2-verbindings op ongeënkripteerde poorte aanvaar. Die bediener kan beide HTTP/1 en ongeënkripteerde HTTP/2 op dieselfde poort aanvaar.
Wanneer Vervoer.Protokolle bevat UnencryptedHTTP2 en bevat nie HTTP1 nie, die vervoer sal ongeënkripteerde HTTP/2 vir adresse gebruik http://. As 'n vervoer opgestel is om beide HTTP/1 en ongeënkripteerde HTTP/2 te gebruik, sal dit HTTP/1 gebruik.
Ondersteuning vir ongeënkripteerde HTTP/2 gebruik "HTTP/2 met Forward-Learning" (RFC 9113, afdeling 3.3). Die verouderde opskrif "Upgrade: h2c" word nie ondersteun nie.
net/netip
addr, AddrPort и Prefix implementeer nou koppelvlakke enkodering.binêre aanhanger и encoding.TextAppender.
net/url
URL implementeer nou ook die koppelvlak enkodering.binêre aanhanger.
os/gebruiker
Op Windows Huidige kan nou in Windows Nano Server gebruik word. Die implementering is opgedateer om die gebruik van funksies van die NetApi32-biblioteek, wat by Nano Server ontbreek, te vermy.
Op Windows Huidige, Lookup и LookupId ondersteun nou die volgende ingeboude gebruikersdiensrekeninge:
- NT BESTUURSSTELSEL
- NT OWERHEID PLAASLIKE DIENS
- NT DIENSTE VAN MAGTIGHEIDSWERK
Op Windows Huidige is aansienlik versnel toe die huidige gebruiker by 'n stadige domein aansluit, wat 'n algemene geval vir baie korporatiewe gebruikers is. Die nuwe implementering se werkverrigting is nou in die orde van millisekondes, vergeleke met die vorige implementering, wat 'n paar sekondes, selfs minute, kan neem om te voltooi.
Op Windows Huidige gee nou die proseseienaar-gebruiker terug wanneer die huidige draad 'n ander gebruiker naboots. Voorheen het dit 'n fout opgelewer.
heruitdrukking
Reguitb implementeer nou die koppelvlak encoding.TextAdapter.
runtime
Funksie GOROOT is nou afgekeur. In nuwer omgewings moet jy verkies om die stelselpad te gebruik om die "go"-binêre te bepaal, en gebruik go env GOROOT om GOROOT te bepaal.
snare
pakket snare voeg verskeie funksies by om met iterators te werk:
- Lines Wys 'n iterator oor nuwe lyn-geskeide lyne in 'n string.
- SplitSeq gee 'n iterator terug oor alle substringe van 'n string geskei deur 'n skeier.
- SplitAfterSeq gee 'n iterator terug oor substringe van 'n string, verdeel na elke voorkoms van die skeier.
- FieldsSeq gee 'n iterator terug oor substringe van 'n string rondom rye witspasie karakters, soos gedefinieerunicode.IsSpace
- FieldsFuncSeq Wys 'n iterator oor substringe van string rondom rye van Unicode-kodepunte wat aan 'n predikaat voldoen.
sync
Implementering sinchroniseer.kaart is verander om werkverrigting te verbeter, veral vir woordeboekveranderings. Byvoorbeeld, onsamehangende stelveranderingskontensie is minder waarskynlik op groot woordeboeke, en dit verg nie meer opboutyd om lae inhoudwoordeboeklading te bereik nie.
As jy enige probleme ondervind, stel GOEXPERIMENT=nosynchashtriemap tydens bou om terug te keer na die ou implementering en asseblief vul die probleemvorm in.
toets
Nuwe metodes T.Konteks и B.Konteks gee 'n konteks terug wat weggegooi word nadat die toets voltooi is en voordat die toetsopruimingsfunksies uitgevoer word.
Nuwe metodes T.Chdir и B.Chdir kan gebruik word om die werkgids vir die duur van 'n toets of maatstaf te verander.
teks/sjabloon
Sjablone ondersteun nou range-over-func en range-over-int.
tyd
tyd implementeer nou koppelvlakke enkodering.binêre aanhanger и encoding.TextAppender.
hawens
Linux
Soos dit was aangekondig Volgens die Go 1.23-vrystellingnotas vereis Go 1.24 Linux-kernweergawe 3.2 of later.
Darwin
Go 1.24 is die laaste weergawe wat op macOS 11 Big Sur sal loop. Go 1.25 sal macOS 12 Monterey of later vereis.
WebAssembly
Die go:wasmexport samesteller-instruksie is by Go-programme gevoeg om funksies na die WebAssembly-gasheer uit te voer.
In WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm), ondersteun Go 1.24 die bou van 'n Go-program as reaktor/biblioteek deur die bouvlag -buildmode=c-shared te spesifiseer.
Meer tipes word nou toegelaat as argument- of resultaattipes vir go:wasmimport-funksies. In die besonder word bool, string, uintptr en wysers na sekere tipes toegelaat (sien besonderhede in dokumentasie), saam met die 32-bis en 64-bis heelgetal- en drywende-punt-tipes, en onveilige.Wyser, wat reeds toegelaat word. Hierdie tipes word ook toegelaat as argument- of resultaattipes vir go:wasmexport-funksies.
Ondersteuningslêers vir WebAssembly is geskuif na lib/wasm vanaf misc/wasm.
Die aanvanklike geheue-voetspoor word aansienlik verminder, veral vir klein WebAssembly-toepassings.
Windows
Die 32-bis vensters/armpoort (GOOS=windows GOARCH=arm) is as stukkend gemerk. Besonderhede in #70705
Bron: linux.org.ru
