Go keele uus versioon 1.24 ilmub seis kuud pärast Go 1.23. Enamik muutusi puudutab tööriistade komplekti, käitusaja ja raamatukogude rakendust. Nagu alati, on väljaanne kooskõla lubadus Go 1. Arendajad ootavad, et peaaegu kõik Go programmid jätkavad kompileerimist ja töötamist nagu varem.
Keeles tehtud muudatused
Go 1.24 toetab nüüd täielikult tüüpide üldisi aliasid: alias tüüp võib olla параметrizirovanud nagu deklareeritud tüüp. Üksikasjad on keele spetsifikatsioonis. Praegu on funktsioon võimalik välja lülitada, seadistades GOEXPERIMENT=noaliastypeparams; kuid aliastypeparams valik eemaldatakse Go 1.25-s.
Tööriistad
go käsk
Go moodulid saavad nüüd jälgida täidetavaid sõltuvusi, kasutades tööriista juhist failis go.mod. See kõrvaldab vajaduse eelneva tööriista lisamise lahenduse järele, kus tööriistad on tühjade impordina failis, mida tavaliselt nimetatakse "tools.go". Go tööriista käsk saab nüüd lisaks Go-ga kaasas olevatele tööriistadele käivitada neid tööriistu. Rohkem teavet saab vaadata dokumentatsioonis.
Uus -tool lipp go get jaoks lisab tööriista direktiivi praegusesse moodulisse määratud pakettide jaoks, lisaks nõudmise direktiivide lisamisele.
Uus meta-muster tool viitab kõigile tööriistadele praeguses moodulis. Seda saab kasutada nende kõigi uuendamiseks läbi go get tool või nende paigaldamiseks oma GOBIN kausta läbi go install tool.
Go run kaudu loodud täidetavad failid ja uus käitumine go tool nüüd vahemälustatakse Go ehituse vahemälus. See muudab korduvad käivitamised kiiremaks suurenenud vahemälu tõttu. #69290.
Käsk go build ja go install nüüd aktsepteerivad -json lippu, mis edastab ehituse väljundi ja vead struktureeritud JSON-väljundina standardse väljundisse. Formaadi üksikasju saab näha go help buildjson.
Lisaks, go test -json nüüd edastab ehituse väljundi ja vead JSON-is, segatuna testimise tulemuse JSON-iga. Neid on võimalik eristada uute Action tüüpide järgi, kuid kui need tekitavad probleeme testimisintegraatsiooni süsteemis, saab naasta tekstipõhise ehituse väljundi juurde läbi GODEBUG seadistuse gotestjsonbuildtext=1.
Uus GOAUTH keskkonnamuutuja pakub paindlikku viisi privaatsete moodulite tõmbamiseks autoriseerimiseks. Üksikasjade nägemiseks vaadake go help goauth.
Käsk go build on nüüd paigaldatav peamooduli versioon kompaleeritud binaarfailis, tuginedes versioonihaldussüsteemi sildile ja/või commit'ile. Suffiks +dirty lisatakse, kui on olemas commit'itmata muudatusi. Versioonihalduse teabe binaarfailist välja jätmiseks võib kasutada lipikut -buildvcs=false.
Uus GODEBUG seade toolchaintrace=1 on nüüd saadaval toolchaini valimisprotsessi jälgimiseks käskudes go.
Cgo
Cgo toetab uusi annotatsioone C funktsioonide jaoks, et parandada käitamise jõudlust. #cgo noescape cFunctionName ütleb kompilaatorile, et funktsiooni C cFunctionName edastatud mälu ei kustu. #cgo nocallback cFunctionName ütleb kompilaatorile, et funktsioon C cFunctionName ei kutsu tagasi ühtegi Go funktsiooni. Suurema teabe leiate cgo dokumentatsioonist.
Cgo keeldub hetkel kompileerimast C funktsiooni kutsunge, mis omab mitmeid kokkusobimatuid deklareerimisi. Näiteks kui f on deklareeritud kui nii void f(int) kui ka void f(double), annab cgo vea, selle asemel et võimaldada vale funktsioonikutsumise järjestuse genereerimist f(0). Uus selle versiooni puhul on paranenud selle veaseisundi tuvastamine, kui kokkusobimatuid deklareerimisi esindavad erinevad failid. #67699.
Objdump
Objdump tööriist toetab nüüd 64-bitise LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) ja S390X (GOARCH=s390x) desassembleerimist.
Vet
Uus tests analüsaator teatab levinud vigadest testide, fuzzing'ute, benchmark'ide ja näidiste deklareerimistes testpakettides, nagu vale vormindustega nimed, vale allkirjad või näidised, mis dokumenteerivad mittevõimelikke identifikaatoreid. Mõned neist vigadest võivad põhjustada testide ebaõnnestumist.
Olemasolev printf-analüsaator teavitab nüüd fmt.Printf(s) vormikutsungite diagnostikast, kus s on mitte-konstantse formaadiga string, ilma muude argumendideta. Sellised kutsungid on peaaegu alati viga, kuna s väärtus võib sisaldada sümbolit %; selle asemel kasutage fmt.Print. 60529. See kontroll kipub leidma vigu olemasolevas koodis ja seetõttu rakendatakse seda ainult siis, kui keele versioon (nagu on määratud go.mod faili direktiivis või kommentaarides `//go:build`) on vähemalt Go 1.24, et vältida püsivate integratsioonihäirete tekkimist uuendamisel Go 1.24 tööriistadele.
Olemasolev buildtag-analüsaator teavitab nüüd diagnoosist, kui on vale vanema versiooni kogumise piirang Go direktiivis //go:build. Näiteks //go:build go1.23.1 viitab punktiversioonile; selle asemel kasutage //go:build go1.23. #64127.
Olemasolev copylock-analüsaator teavitab nüüd diagnoosist, kui kolmes „for” tsüklis, nagu for i := iter(); done(i); i = next(i) { … }, on muutuja, mis sisaldab sync.Lockerit, nagu sync.Mutex. Go 1.22 muutsin selliste tsüklite käitumist, et iga iteratsiooni jaoks luuakse uus muutuja, kopeerides eelneva iteratsiooni väärtused; see kopeerimine ei ole lukustuste jaoks ohutu. #66387.
GOCACHEPROG
Sisemine binaarfail cmd/go ja testide vahemälu mehhanism võivad nüüd olla rakendatud lapsprotsesside kaudu, mis rakendavad JSON protokolli cmd/go tööriista ja lapseprotsessi vahel, mis on määratud keskkonnamuutujaga GOCACHEPROG. Varem oli see GOEXPERIMENT. Protokolli detaile saab näha dokumentatsioonis.
Käitusaja
Mitmed jõudluse täiustused käituses on keskmiselt vähendanud CPU kulusid 2–3% esinduslikku mõõtmiste kogumit. Tulemused võivad varieeruda olenevalt rakendusest. Need täiustused hõlmavad uut sisseehitatud map реалiseerimist põhinedes Rootsitabelid, tõhusam väikeste objektide mälu eraldamine ja uus sisemine käituse mutexi реалiseerimine.
Uus sisseehitatud map реалiseerimine ja uus sisemine käituse mutex võivad olla keelatud seadetega GOEXPERIMENT=noswissmap ja GOEXPERIMENT=nospinbitmutex vastavalt koostamisel.
Kompilaator
Kompilaator oli juba keelanud määrata uusi meetodeid saaja tüüpidega, mis olid genereeritud cgo, kuid seda piirangut oli võimalik ümber käia tüübialiasiga. Go 1.24 teavitab nüüd alati veast, kui saaja tähistab genereeritud cgo tüüpi, otse või kaudselt (tüübialiasi kaudu).
Lingija
Lingija genereerib nüüd GNU kogu identifikaatori (ELF NT_GNU_BUILD_ID kirje) ELF platvormidel ja UUID (Mach-O LC_UUID laadimisprotsessis) macOS-il vaikimisi. Kogu identifikaator või UUID genereeritakse Go kogu identifikaatorist. Selle saab välja lülitada lingija lipuga -B none või ümber määrata lingija lipuga -B 0xNNNN koos kasutaja määratud heksadesimaalse väärtusega.
Pööramine
Nagu on märgitud Go 1.22 väljaande märkustes,, Go 1.24 nõuab nüüd Go 1.22.6 või hilisema pööramise jaoks. Arendajad eeldavad, et Go 1.26 nõuab pööramiseks Go 1.24 või hilisema punktiväljaande.
Standardraamatukogu
Piiratud kaustade juurdepääs failisüsteemile
Uus tüüp os.Root pakub võimalust teostada failisüsteemi operatsioone kindla kausta piires.
Function os.OpenRoot avatakse kaust ja tagastatakse os.Root. Meetodid on os.Root tegutsevad selles kataloogis ja ei luba teedel viidata kohtadele väljaspool katalooge, sealhulgas neile, mis järgivad sümboolseid linke väljaspool katalooge. meetodid os.Root peegeldavad enamiku failisüsteemi toimingutest, mis on saadaval os paketis, sealhulgas näiteks os.Root.Open, os.Root.Create, os.Root.Mkdir ja os.Root.Stat.
Uus benchmark funktsioon
Bennchmarkid saavad nüüd kasutada kiiremat ja vähem veaallikat meetodit testing.B.Loop benchmarkide iteratsioonide tegemiseks nagu for b.Loop() { … } asemel tüüpiliste silmusstruktuuride kaudu, mis hõlmavad b.N nagu for range b.N. See pakub kahte märkimisväärset eelist:
- Benchmarki funktsioon täidetakse täpselt üks kord iga -count kohta, seega kallid seadistamis- ja puhastusastmed viiakse läbi ainult üks kord.
- Funktsiooni kutsumise parameetrid ja tulemused elavad edasi, vältides kompilaatori täielikku optimeerimist tsükli kehast.
Parendatud finalisaatorid
Uus funktsioon runtime.AddCleanup on lõpetamismehhanism, mis on paindlikum, efektiivsem ja vähem vigu tekitav kui runtime.SetFinalizer. AddCleanup kinnitab objekti puhastusfunktsiooni, mis aktiveerub, kui objekt muutub kättesaamatuks. Erinevalt SetFinalizer'ist saab ühe objekti külge kinnitada mitu puhastust. Puhastused võivad olla seotud sisemiste osutitega, puhastused ei põhjusta tavaliselt leket, kui objektid moodustavad tsükli, ja puhastused ei viivita objekti või objektide vabastamisega, millele see osutab. Uus kood peaks eelistama AddCleanup'i SetFinalizer'ile.
Uus weak paket
Uus paket weak pakub nõrku osuteid.
Nõrgad osutid on madala taseme primitivi, mida pakutakse mäluruumi efektiivseks kasutamiseks mõeldud struktuuride loomiseks, nagu nõrgad sõnastikud väärtuste kaardistamiseks, kanoniseerimise sõnastikud mis tahes jaoks, mis ei ole kaetud paketiga unique, ja erinevat liiki puhverdamiseks. Nende kasutusjuhtide toetamiseks pakub see väljaanne ka runtime.AddCleanup ja maphash.Comparable.
Uus crypto/mlkem paket
Uus paket crypto/mlkem rakendab ML-KEM-768 ja ML-KEM-1024.
ML-KEM on post-kvantaalne võtmevahetusmehhanism, varem tuntud kui Kyber ja spetsifitseeritud FIPS 203.
Uued paketid crypto/hkdf, crypto/pbkdf2 ja crypto/sha3
Uus paket crypto/hkdf rakendab HMAC-põhist võtme väljundifunktsiooni “Extract-and-Expand” HKDF, nagu on määratletud RFC 5869.
Uus paket crypto/pbkdf2 rakendab paroolipõhist võtme väljundifunktsiooni PBKDF2, nagu on määratletud RFC 8018.
Uus paket crypto/sha3 rakendab SHA-3 ja SHAKE ning cSHAKE laiendatud väljundi funktsioonid, nagu on määratletud FIPS 202.
Kõik kolm paketti põhinevad varem olemasolevatel pakettidel golang.org/x/crypto/…
FIPS 140-3 vastavus
See väljaanne sisaldab uut mehhanismide komplekti FIPS 140-3 vastavuse tagamiseks.
Go krüptograafia moodul on standardraamatukogu sisemiste pakettide kogum, mida kasutatakse FIPS 140-3 heakskiidetud algoritmide rakendamiseks. Rakendused ei vaja muudatusi Go krüptograafia mooduli kasutamiseks heakskiidetud algoritmide jaoks.
Uut keskkonnamuutujat GOFIPS140 saab kasutada Go krüptograafia mooduli versiooni valimiseks, mida kasutada koostamisel. Uut GODEBUG seade fips140 saab kasutada FIPS 140-3 režiimi lubamiseks töötamise ajal.
Go 1.24 sisaldab Go krüptograafia moodulit versioonis v1.0.0, mis on hetkel akrediteeritud CMVP laboriga testimisel.
Uus eksperimentaalne pakett testing/synctest
Uus eksperimentaalne paket testing/synctest pakett toetab konkurentsikoodi testimist.
- Function synctest.Run käivitab rühma gorutine isoleeritud "mulli" sees. Mullis toimivad paketi funktsioonid aeg vale aegadel.
- Funktsioonid synctest.Wait ootab, kuni kõik gorutiinid on praeguses mullis blokeeritud.
Lisainfot leiate paketi dokumentatsioonist.
Pakett synctest on eksperimentaalne ja peab olema aktiveeritud seadistusega GOEXPERIMENT=synctest. Paketi API võib tulevastes väljaannetes muutuda. #67434 rohkema teabe saamiseks ja tagasiside edastamiseks.
Väikesed muudatused teegis
archive
Implementatsioonid (*Writer.AddFS) archive/zip ja archive/tar nüüd kirjutavad tühja katalooge pealkirja.
bytes
Pakett bytes lisab mitmeid funktsioone, mis töötavad iteratooridega:
- Lines tagastab iteratori ridade jaoks, jagatud uue reaga baiti lõikes.
- SplitSeq tagastab iteratori kõigi alam lõikude jaoks baiti lõikes, jaotatud eraldiga.
- SplitAfterSeq tagastab iteratori alam lõikude jaoks baiti lõikes, jaotatud pärast iga eraldi esinemise eraldist.
- FieldsSeq tagastab iteraatori viipidest, mis asuvad tühikute järjekordade ümber, nagu on määratletud unicode.IsSpace
- FieldsFuncSeq tagastab iteraatori viipidest, mis asuvad ümbritsevate Unicode koodipunktide järjekordade ümber, mis vastavad predikaadile.
crypto/aes
Tagastatud väärtus NewCipher ei implementeeri enam meetodeid NewCTR, NewGCM, NewCBCEncrypter ja NewCBCDecrypter. Need meetodid olid dokumenteerimata ja ei olnud kõigis arhitektuurides kergesti kergesti kätte saadavad. Nüüd on väärtus Block peab olema edastatud otse vastavatesse funktsioonidesse crypto/cipher. Praegu kontrollib crypto/cipher siiski neid meetodeid Block väärtustes, isegi kui need ei ole enam standardteegis toetatud.
crypto/cipher
Uus funktsioon NewGCMWithRandomNonce tagastab AEAD, mis implementeerib AES-GCM, genereerides juhusliku ühekordse numbri ajal, kui toimub tihendamine, ja lisades selle krüpteeritud teksti algusesse.
Rakendus Stream, tagastatud NewCTR kasutamisel crypto/aes on nüüd mitu korda kiirem amd64 ja arm64.
NewOFB, NewCFBEncrypter ja NewCFBDecrypter on nüüd loetud aegunuks. OFB ja CFB režiimid ei ole autentimata, mis üldiselt võimaldab aktiivsetel rünnakutel manipuleerida ja taastada avatud teksti. Rakendustele soovitatakse kasutada AEAD asemel. Kui autentimata režiim Stream on vajalik, saab kasutada NewCTR asemel.
crypto/ecdsa
PrivateKey.Sign loob nüüd määratletud allkirja vastavalt RFC 6979, kui juhuslikkuse allikas on nil.
crypto/md5
Tagastatud väärtus md5.New, implementeerib nüüd ka liidese encoding.BinaryAppender.
crypto/rand
Function Loe garanteerib nüüd, et ebaõnnestumisi ei esine. Kui Read ei õnnestu lugemisel Reader, programm lõpetab töö viivitamatult. Pange tähele, et vaikimisi Reader on dokumenteeritud töötama alati edukalt, seega peaks see muudatus mõjutama ainult neid programme, mis ületavad muutuja Reader. Üks erand on Linuxi südamikud versioonides enne 3.17, kus vaikimisi Reader avab endiselt /dev/urandom ja võib ebaõnnestuda.
Linuxi versioonis 6.11 ja hiljem kasutab Reader nüüd süsteemikõnet getrandom vDSO kaudu. See on mitu korda kiirem, tavaliselt väikeste lugemiste jaoks.
OpenBSD-s kasutab Reader nüüd arc4random_buf(3).
Uus funktsioon Tekst nüüd suudab genereerida krüptograafiliselt turvalisi juhuslikke tekste.
crypto/rsa
GenerateKey nüüd tagastab vea, kui küsitakse vähem kui 1024-bitist võtit. Kõik meetodid Sign, Verify, Encrypt ja Decrypt tagastavad nüüd vea, kui neid kasutatakse alla 1024-bitise võtmega. Sellised võtmed ei ole turvalised ja ei tohiks olla kasutusel. GODEBUG seadistus rsa1024min=0 taastab vana käitumise, kuid Go arendajad soovitavad seda teha ainult vajadusel ja ainult teste tehes, näiteks lisades rea //go:debug rsa1024min=0 testifaili. Uus an example GenerateKey pakub lihtsasti kasutatavat standardset 2024-bitist testvõtit.
Nüüd on ohutu ja tõhus kasutada PrivateKey.Precompute kuni PrivateKey.Validate. Precompute on nüüd kiirem osaliselt täidetud PrecomputedValues, näiteks võtme eraldamisel JSON-ist.
Pakett tagastab nüüd rohkem vale võtmeid, isegi kui Validate ei ole kutsutud, ja GenerateKey nüüd võib tagastada uusi vigu katkenud juhuslikkuse allikate jaoks. Väljad Primes ja Precomputed struktuurid PrivateKey nüüd kasutatakse ja valideeritakse isegi siis, kui mõned väärtused puuduvad. Samuti on tehtud muudatusi crypto/x509 keyde dešifreerimise ja väljavõtmise osas, mida käsitletakse allpool.
SignPKCS1v15 ja VerifyPKCS1v15 nüüd toetavad SHA-512/224, SHA-512/256 ja SHA-3.
GenerateKey nüüd kasutab natuke teistsugust meetodit privaatsete eksponentside genereerimiseks (Carmichael funktsioon Euler'i funktsiooni asemel). Haruldased rakendused, mis väljastpoolt uuesti genereerivad võtmeid ainult algarvudest, võivad toota erinevaid, kuid ühilduvaid tulemusi.
Avalike ja privaatsete võtmete operatsioonid on nüüd kuni kaks korda kiirem wasm-is.
crypto/sha*
- crypto/sha1: tagastatud väärtus sha1.New nüüd rakendab samuti liidest encoding.BinaryAppender.
- crypto/sha256: tagastatud väärtused sha256.New ja sha256.New224 nüüd rakendavad samuti liidest encoding.BinaryAppender.
- crypto/sha512: tagastatud väärtused sha512.New, sha512.New384, sha512.New512_224 ja sha512.New512_256, nüüd rakendavad samuti liidest encoding.BinaryAppender.
crypto/subtle
Uus funktsioon WithDataIndependentTiming võimaldab kasutajal täita funktsiooni, millel on arhtektuurile spetsiifilised funktsioonid, mis tagavad teatud juhiste muutumatuse andmete aja väärtuse osas. Seda saab kasutada, et veenduda, et kood, mis on loodud töötama konstantse aja jooksul, pole protsessoritasandi funktsioonide tõttu optimeeritud nii, et see töötab muutuva ajaga. Praegu kasutab WithDataIndependentTiming bitit PSTATE.DIT arm64-l ja ei tee midagi kõigil teistel arhtektuuridel. GODEBUG seadistus dataindependenttiming=1 lubab DIT režiimi kogu Go programmile.
Kokkuvõte XORBytes peab täielikult kattuma või mitte kattuma sisendiga. Varasem käitumine oli vastasel juhul määramatu, nüüd on XORBytes panika.
crypto/tls
TLS-server toetab nüüd Encrypted Client Hello (ECH). Seda funktsiooni saab lubada täites välja Config.EncryptedClientHelloKeys.
Uus post-kvantne võtmevahetuse mehhanism X25519MLKEM768 on nüüd toetatud ja vaikimisi sisse lülitatud, kui Config.CurvePreferences on nil. GODEBUG seadistus tlsmlkem=0 tagastab vaike.
X25519Kyber768Draft00 katsetatav võtmevahetus on eemaldatud.
Võtmevahetusprotsess käideldakse nüüd täielikult crypto/tls paketi kaudu. Protsess Config.CurvePreferences ignoreeritakse ning sisu kasutatakse ainult selleks, et määrata, millised võtmevahetused kaasata, kui väli on täidetud.
Uus väli ClientHelloInfo.Extensions loetleb Client Hello sõnumis saadud laiendite identifikaatorite nimekirja. See võib olla kasulik TLS klientide jälgimisel.
crypto/x509
GODEBUG seadistus x509sha1 on eemaldatud. Certficicate.Verify ei toeta enam SHA-1 põhiseid allkirju.
OID rakendab nüüd liideseid encoding.BinaryAppender ja encoding.TextAppender.
Sertifikaatide poliitikaväli on muudetud Certificate.PolicyIdentifiers järgnevaga Certificate.Policies. Sertifikaatide analüüsimisel täidetakse mõlemat välja, kuid sertifikaatide poliitikate loomisel võetakse need väljalt Certificate.Policies, mitte Certificate.PolicyIdentifiers. See muudatus võib olla taastatav GODEBUG seadistusega x509usepolicies=0.
CreateCertificate genereerib nüüd seerianumbri, kasutades RFC 5280 ühilduvat meetodit, kui väljal Certificate.SerialNumber on nil, selle asemel, et ebaõnnestuda.
Certificate.Verify toetab nüüd poliitika valideerimist, nagu on määratletud RFC 5280 ja RFC 9618. Uus väli VerifyOptions.CertificatePolicies võib seadistada vastuvõetavate poliitikate kogumiks OIDid. Ainult kehtivate poliitikate veergudega sertifikaatide ahelad tagastatakse Certificate.Verify.
MarshalPKCS8PrivateKey tagastab nüüd vea asemel vale RSA võti väljakutse. (MarshalPKCS1PrivateKey ei tagasta viga ja selle käitumine valede võtmete korral jääb määramatuks.)
ParsePKCS1PrivateKey ja ParsePKCS8PrivateKey kasutavad nüüd ja valideerivad kodeeritud CRT väärtusi, seega saavad tagasi lükata vale RSA võtmed, mis varem olid aktsepteeritud. Kasutades GODEBUG seadistust x509rsacrt=0 tagastab CRT väärtuste ümberarvutamise.
debug/elf
Pakett debug/elf lisab toetuse sümbolite versioonide töötlemiseks dünaamilistes ELF (Executable and Linkable Format) failides. Uus meetod File.DynamicVersions tagastab ELF failis määratud dünaamiliste versioonide nimekirja. Uus meetod File.DynamicVersionNeeds tagastab ELF failile vajalikud dünaamilised versioonid, mis on määratletud teistes ELF objektides. Lõpuks, uued väljad Symbol.HasVersion ja Symbol.VersionIndex näitavad sümboli versiooni.
kodeerimine
Kaks uut liidest TextAppender ja BinaryAppender olidate ontext taotleb aitoma pata nimesemente mangtevaid teksedes ja binaarset esitlemat men fiktsiooni saldile. Need interface'id pakuvad sama funktsionaalsust nagu TextMarshaler ja BinaryMarshaler, kuid uue saldi eraldamise asemel lisavad nad andmed otse olemasolevasse saldi. Need interface'id on nüüd rakendatud standardraamatukogu tüüpide kaudu, mis juba rakendavad TextMarshaler ja/või BinaryMarshaler.
encoding/json
Struktuuri väli kompileerimise ajal, kasutades uut võimalust omitzero struktuuri väli sildis, jäetakse vahele, kui selle väärtus on null. Kui väli tüübil on meetod IsZero() bool, kasutatakse seda väärtuse nulliks määramiseks. Muidu on väärtus null, kui see on nullväärtus tema tüübile. Omitzero silt on puhtam ja vähem vigaeng alus võrreldes omitempty'iga, kui kavatsus on jätta nullväärtused välja. Eriti, erinevalt omitempty'ist, jätab omitzero välja nullid time.Time väärtused, mis on sage probleemide allikas.
Kui mõlemad omitempty ja omitzero on määratud, jäetakse väli vahele, kui väärtus on tühi või null (või mõlemat korraga).
UnmarshalTypeError.Field nüüd sisaldab sisseehitatud struktuure, mis pakuvad detailsemaid veateateid.
go/types
Kõik andmestruktuurid go/types, mis paljastavad paari meetodi järjendid nagu Len() int ja At(int) T, sisaldavad nüüd ka meetodeid, mis tagastavad iteratoore, lihtsustades sellist koodi:
params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
Selle jaoks:
for param := range fn.Signature().Params().Variables() { use(param) }
Meetodid: 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: tagastatud väärtus Uus, implementeerib nüüd ka liidese encoding.BinaryAppender
- hash/crc32: tagastatud väärtused Uus ja NewIEEE, nüüd rakendavad samuti liidest encoding.BinaryAppender
- hash/crc64: tagastatud väärtus Uus, implementeerib nüüd ka liidese encoding.BinaryAppender
- hash/fnv: tagastatud väärtused New32 New32a New64 New64a New128 ja New128a, nüüd rakendavad samuti liidest encoding.BinaryAppender
- hash/maphash: uued funktsioonid Comparable ja WriteComparable suudavad arvutada mis tahes väärtuse hash'i, mida on võimalik võrrelda. See võimaldab hash'ida ükskõik mida, mida saab kasutada Go sõnastiku võtmena.
log/slog
Uus DiscardHandler on handler, mis ei ole kunagi aktiveeritud ja viskab alati oma väljundi minema.
Tase ja LevelVar rakendavad nüüd liidest encoding.TextAppender.
math/*
- math/big: Float, Int ja Rat rakendavad nüüd liidest encoding.TextAppender.
- math/rand: aegunud kõrgema taseme funktsioonide väljakutsed Seed ei oma enam mingit mõju. Vana käitumise taastamiseks saab kasutada GODEBUG seadistuse randseednop=0. Rohkem konteksti leiate pakkumine 67273.
- math/rand/v2: ChaCha8 ja PCG rakendavad nüüd liidest encoding.BinaryAppender.
net
ListenCondig kasutab nüüd vaikimisi MPTCP-d süsteemides, kus see on toetatud (praegu ainult Linux).
IP rakendab nüüd liidest encoding.TextAppender.
net/http
Piirang on muutunud Transport saadetud informatiivsete vastuste 1xx osas vastuseks päringule. Varem lõpetas see päringu ja tagastas vea pärast rohkem kui 5 vastuse 1xx saamist. Nüüd tagastab see vea ainult siis, kui kõikide vastuste 1xx suurus ületab konfiguratsiooni seadistuse. Transport.MaxResponseHeaderBytes.
Lisaks, kui päringul on jälgimise konks net/http/httptrace.ClientTrace.Got1xxResponse, nüüd pole vastuste 1xx koguarvule piiranguid. Konks Got1xxResponse võib tagastada vea päringu peatamiseks.
Transport ja Server omavad nüüd HTTP2 välja, mis lubab HTTP/2 protokolli seadistuste konfigureerimist.
Uued väljad Server.Protocols ja Transport.Protocols pakuvad lihtsat viisi seadistamiseks, milliseid HTTP protokolle server või klient kasutab.
Server ja klient saavad olla seadistatud toeks krüpteerimata ühendustele HTTP/2.
Kui Server.Protocols sisaldab UnencrypterHTTP2, server aktsepteerib HTTP/2 ühendusi krüpteerimata portides. Server võib ühel ja samal pordil korraga aktsepteerida nii HTTP/1 kui ka krüpteerimata HTTP/2.
Kui Transport.Protocols sisaldab UnencryptedHTTP2 ja ei sisalda HTTP1, seega kasutatakse edastamiseks krüptimata HTTP/2 aadressidel. http://. Kui transport on konfigureeritud kasutama samaaegselt HTTP/1 ja krüptimata HTTP/2, siis kasutatakse HTTP/1.
Krüptimata HTTP/2 tugi kasutab „HTTP/2 etteteatamisega“ (RFC 9113, jaotis 3.3). Aegunud pealkirja “Upgrade: h2c” tugi puudub.
net/netip
Addr, AddrPort ja Prefix rakendavad nüüd liideseid encoding.BinaryAppender ja encoding.TextAppender.
net/url
URL nüüd rakendab samuti liidest encoding.BinaryAppender.
os/user
Windowsis Current võib nüüd kasutada Windows Nano Serveris. Rakendust on uuendatud, et vältida NetApi32 teegi funktsioonide kasutamist, mis ei ole Nano Serveris olemas.
Windowsis Current, Lookup ja LookupId toetavad nüüd järgmisi sisseehitatud teenuse kasutajakontosid:
- NT AUTHORITY\SYSTEM
- NT AUTHORITY\LOCAL SERVICE
- NT AUTHORITY\NETWORK SERVICE
Windowsis Current oli oluliselt kiirendatud, kui praegune kasutaja on seotud aeglase domeeniga, mis on paljude ettevõtte kasutajate jaoks tavaline juhtum. Uue rakenduse jõudlus on nüüd millisekundites, võrreldes eelmise rakendusega, mis võis lõpetamiseks võtta mitu sekundit, isegi minuteid.
Windowsis Current nüüd tagastab protsessi omaniku kasutaja, kui käivitatud lõng annab endast teise kasutajana. Varasemalt tagastas see vea.
regexp
Regexp rakendab nüüd liidest encoding.TextAdapter.
runtime
Function GOROOT on nüüd kuulutatud aegunuks. Uues koodis tuleks eelistada süsteemsete teede kasutamist binaari "go" määratlemiseks ning kasutada go env GOROOT, et määratleda GOROOT.
strings
Pakett strings lisab mitmeid funktsioone iteratooridega töötamiseks:
- Lines tagastab iteratsiooni uue reaga eraldatud ridade üle stringis.
- SplitSeq tagastab iteratsiooni kõikide alamsõnedega stringis, eraldatud sepaarori abil.
- SplitAfterSeq tagastab iteratsiooni alamsõnedega stringis, jagades pärast iga sepaarori esinemist.
- FieldsSeq tagastab iteratsiooni alamsõnedega stringis, mis on eraldatud valgete märkide järeltulevate järjestustega, nagu on määratud.unicode.IsSpace
- FieldsFuncSeq tagastab iteratsiooni alamsõnedega stringis, mis on eraldatud Unicode'i koodipunktide järjestustega, mis vastavad predikaadile.
sync
Rakendus sync.Map oli muudetud, et parandada jõudlust, eriti sõnastiku muudatuste osas. Näiteks on väiksem tõenäosus, et muutuvad mittetäiendavad kogud suuremates sõnastikes, ning enam ei ole vaja ajakulu, et saavutada madala konkurentsi sõnastiku koormust.
Kui teil tekib mingeid probleeme, seadistage GOEXPERIMENT=nosynchashtriemap kogumise ajal, et naasta vana rakenduse juurde ja palun täitke probleemide vorm.
testing
Uued meetodid T.Kontekst ja B.Kontekst tagastavad konteksti, mis tühistatakse testi lõpuleviimise järel ja enne puhastusfunktsioonide täitmist.
Uued meetodid T.Chdir ja B.Chdir võivad olla kasutatud töökausta muutmiseks testi või benchmark'i töö perioodil.
text/template
Mallid toetavad nüüd range-over-func ja range-over-int.
aeg
Aeg rakendab nüüd liideseid encoding.BinaryAppender ja encoding.TextAppender.
Pordid
Linux
Kuidas oli teadaanded Go 1.23 versiooniteatises, Go 1.24 nõuab Linuxi tuuma versiooni 3.2 või uuemat.
Darwin
Go 1.24 on viimane väljalase, mis töötab macOS 11 Big Sur. Go 1.25 nõuab macOS 12 Monterey või uuemat.
WebAssembly
go:wasmexport kompilaatori direktiiv on lisatud Go programmidele funktsioonide eksportimiseks WebAssembly hosti.
WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 toetab Go programmi kogumist kui reactor/library näidates koostamise lippu -buildmode=c-shared.
Rohkem tüüpe on nüüd lubatud funktsioonide go:wasmimport argumentide või tagastustena. Eriti lubatakse bool, string, uintptr ning viidatakse teatud tüüpide (rohkem teavet leiate dokumentatsioonis), koos 32-bitiste ja 64-bitiste täisarvude ning ujuvate punktide ja unsafe.Pointer'iga, mis on juba lubatud. Need tüübid on samuti lubatud funktsioonide go:wasmexport argumentide või tagastustena.
WebAssembly toega failid on seatud lib/wasm kausta, asemel misc/wasm.
Algne mälu suurus on oluliselt vähendatud, eriti väikeste WebAssembly rakenduste jaoks.
Windows
32-bitine windows/arm port (GOOS=windows GOARCH=arm) on märgitud katkenuks. Üksikasjad leiate #70705
Allikas: linux.org.ru
