Gaan 1.24

Gaan 1.24

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

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

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

Voeg 'n opmerking