Go keele uus väljaanne, versioon 1.24, tuleb välja kuus kuud pärast Go 1.23. Enamik muudatusi puudutab tööriistade ketti, tööaega ja teeke. Nagu alati, tagab väljaanne ühtsuse lubaduse Go 1. Arendajad ootavad, et peaaegu kõik Go programmid jätkavad kompileerimist ja töötamist nagu varem.
Muutused keeles
Go 1.24 toetab nüüd täielikult üldisi tüübialiaase: tüübialiaas võib olla parameetriseeritud nagu deklareeritud tüüp. Üksikasjad keele spetsifikatsioonis. Praegu saab võimalust välja lülitada, määrates GOEXPERIMENT=noaliastypeparams; kuid aliastypeparams valik eemaldatakse Go 1.25-s.
Tööriistad
Go käsk
Go moodulid saavad nüüd jälgida täitmise sõltuvusi, kasutades tööriista direktiivi go.mod failis. See kõrvaldab vajaduse eelneva lahenduse järele tööriistade lisamiseks kui tühjad impordid failis, mida tavaliselt nimetatakse "tools.go". Go käsk tool saab nüüd neid tööriistu käivitada lisaks Go pakettidega kaasasolevatele tööriistadele. Rohkem teavet leiate dokumentatsioon.
Uus lipp -tool käsule go get lisab tööriista direktiivi praegusele moodulile määratud pakettide jaoks lisaks nõudmise direktiivide lisamisele.
Uus meta-muster tööriist viitab kõigile tööriistadele praeguses moodulis. Seda saab kasutada nende kõigi värskendamiseks käsuga go get tool või nende paigaldamiseks oma GOBIN katalooge käsuga go install tool.
Käideldavad failid, mis on loodud käsuga go run ja uued käituskäskude käitumine, salvestatakse nüüd Go ehituskausta. See muudab korduvad käivitused suurenenud vahemälu tõttu. #69290.
Käskude go build ja go install nüüd aktsepteerivad lippu -json, mis raporteerib ehituse väljundi ja vead struktureeritud JSON-väljundina standardväljundis. Vormingu üksikasju saab näha kuidas go help buildjson.
Lisaks, go test -json raporteerib nüüd ehituse väljundi ja vead JSON-is, segatuna testimise tulemuste JSON-iga. Need saab tuvastada uute Action tüüpide järgi, kuid kui need põhjustavad probleeme integreerimistestide süsteemis, saab tagasi lülitada ehituse tekstiväljundile kaudu seade GODEBUG gotestjsonbuildtext=1.
Uus keskkonnamuutuja GOAUTH pakub paindlikku viisi privaatsuse moodulite tõmbamise autoriseerimiseks. Üksikasju leiate go help goauth.
Käsk go build on nüüd installitud peamise mooduli versioon koodatud binaaris, tuginedes tagile ja/ või versioonihaldussüsteemi commit'ile. Suffiks +dirty lisatakse, kui on olemas komiteerimata muudatusi. Versioonihalduse teabe välistamiseks binaarist saab kasutada lippu -buildvcs=false.
Uus GODEBUG seadistus toolchaintrace=1 saab nüüd kasutada töötlemise protsessi jälgimiseks go meeskonna tööriistade valimisel.
Cgo
Cgo toetab uusi C-funktsioonide annotatsioone jooksuaegse jõudluse parandamiseks. #cgo noescape cFunctionName ütleb kompilaatorile, et C-funktsioonile cFunctionName edastatud mälu ei kattu. #cgo nocallback cFunctionName ütleb kompilaatorile, et C-funktsioon cFunctionName ei kutsu tagasi ühtegi Go funktsiooni. Rohkem teavet leiate cgo dokumentatsioonist.
Cgo keeldub praegu kompileerimast C-funktsiooni kutsungeid, millel on mitu kokkusobimatut deklareerimist. Näiteks, kui f on deklareeritud samaaegselt void f(int) ja void f(double), teatab cgo veast hoopis vale kutsesekventsi genereerimise asemel f(0). Uue versiooni puhul on paranenud selle veatingimuse tuvastamine, kui kokkusobimatud deklareerimised ilmnevad erinevates failides. #67699.
Objdump
Objdump tööriist toetab nüüd 64-bitise LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) ja S390X (GOARCH=s390x) disassemblingut.
Vet
Uus testide analüsaator teavitab levinud vigadest testide, fuzzide, kiiruskatsete ja näidete deklareerimisel testipakettides, nagu vale nimevorming, vale allkirjad või näited, mis dokumenteerivad mitteeksisteerivaid ID-sid. Mõned neist vigadest võivad põhjustada testide ebaõnnestumist.
Praegune printf analüsaator teavitab nüüd fmt.Printf(s) vormi kutsungite diagnoosimisest, kus s on mittesümboolne formaadi string, ilma muude argumentideta. Sellised kutsungid on peaaegu alati vead, kuna s võib sisaldada sümbolit %; selle asemel tuleks kasutada fmt.Print. 60529. See kontroll annab sageli tulemusi olemasolevas koodis ja seetõttu rakendatakse seda ainult siis, kui keele versioon (nagu on määratletud go.mod faili go soovitusest või kommentaaridest //go:build) on vähemalt Go 1.24, et vältida pideva integreerimise ebaõnnestumist, kui uuendatakse Go 1.24 tööriistadele.
Olemasolev analüsaator buildtag annab nüüd diagnostikat, kui on vale versiooniga ehitamise piirang Go direktiivis //go:build. Näiteks //go:build go1.23.1 viitab punktversioonile; asemele kasutage //go:build go1.23. #64127.
Olemasolev analüsaator copylock annab nüüd diagnostikat, kui muutuja, mis on deklareeritud kolmes “for” tsüklis, nagu for i := iter(); done(i); i = next(i) { … }, sisaldab sync.Locker, nagu sync.Mutex. Go 1.22 muudab nende tsüklite käitumist, luues igal iteratsioonil uue muutuja, kopeerides eelnevad väärtused; see kopeerimine ei ole lukudega turvaline. #66387.
GOCACHEPROG
Sisemine binaar cmd/go ja testide vahemälu mehhanism võivad nüüd olla rakendatud alamprotsessides, mis rakendavad JSON protokolli cmd/go tööriista ja alamprotsessi vahel, mida nimetatakse keskkonnamuutujaks GOCACHEPROG. Varem oli see GOEXPERIMENT. Protokollide üksikasju saab vaadata dokumentatsioon.
Suunamine
Mitmed jõudlusparendused juhtimisse on vähendanud CPU ülepeakaalu keskmiselt 2-3% esinduslike jõudluste komplekti seas. Tulemused võivad varieeruda rakenduste vahel. Need parendused hõlmavad uut sisseehitatud map'i Teostust, mis põhineb Soomesüsteemidel, väikeste objektide tõhusam mälu jaotus ja uus sisemine runtime'i mutex teostus.
Uus sisseehitatud map'i teostus ja uus sisemine runtime'i mutex võivad olla välja lülitatud seadetega GOEXPERIMENT=noswissmap ja GOEXPERIMENT=nospinbitmutex vastavalt ehitamise ajal.
Kompilaator
Kompilaator keelas juba uute meetodite defineerimise, mille saajate tüüpide genereerimine oli cgo, kuid see piirang oli võimalik ületada tüübialiaste kaudu. Go 1.24 annab nüüd alati veateate, kui saaja viitab genereeritud cgo tüübile, otse või kaudselt (tüübialiaste kaudu).
Linkija
Linkija genereerib nüüd GNU ehitustunnuse (ELF NT_GNU_BUILD_ID kirje) ELF platvormidel ja UUID (Mach-O LC_UUID laadimise käsk) macOS-is vaikimisi. Ehitustunnus või UUID genereeritakse Go ehitustunnusest. Seda saab välja lülitada linkija lipuga -B none või üle kirjutada linkija lipuga -B 0xNNNN koos kasutaja määratud kuuekandilise väärtusega.
Loodus
Kuidas on märgitud Go 1.22 väljaande märkmetes, Go 1.24 nõuab nüüd Go 1.22.6 või uuemat. Arendajad ootavad, et Go 1.26 nõuab Go 1.24 punktiväljaanne või uuem.
Standardsed raamatukogud
Ahnkude kaudu juurdepääsu failisüsteemile
Uus tüüp os.Root kätkeb võimalust teostada failisüsteemi operatsioone kindlas kaustas.
Funktsioon os.OpenRoot avatakse kaust ja tagastatakse os.Root. Meetodid sellel os.Root toimivad antud kaustas ja ei luba teed näidata asukohtadele väljaspool kausta, sealhulgas need, mis järgivad sümboolseid linke kaustast välja. Meetodid os.Root peegeldavad enamikku 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
Benchmarkid saavad nüüd kasutada kiiremat ja vähem vigadele kalduvat meetodit testing.B.Loop iteratsioonide teostamiseks, näiteks for b.Loop() { … }, tavapäraste tsükliliste struktuuride asemel b.N-le, näiteks for range b.N. See pakub kahte olulist eelist:
- Benchmark funktsioon täidetakse täpselt üks kord iga -counti korral, seega kulukad seadistamis- ja koristamisetapid teostatakse ainult üks kord.
- Funktsiooni kutsumise parameetrid ja tulemused püsivad, takistades kompilaatoril tsükli sisu täielikku optimeerimist.
Parandatud lõpetajad
Uus funktsioon runtime.AddCleanup on lõpetamise mehhanism, mis on paindlikum, efektiivsem ja vähem vigadele kalduv kui runtime.SetFinalizer. AddCleanup kinnitab koristamisfunktsiooni objektile, mis käivitatakse kohe, kui objekt muutub kätte saamatu. Erinevalt SetFinalizerist, võib mitmeid koristusi kinnitada ühele objektile, koristused võivad olla seotud sisemiste pointeritega, koristused ei tekita tavaliselt lekkimisi, kui objektid moodustavad tsükli, ja koristused ei edasta objekti või objektide vabastamist, millele see osutab. Uus kood peaks eelistama AddCleanup'i SetFinalizer'ile.
Uus weak paket
Uus paket weak pakub nõrku viiteid.
Nõrgad viiteid on madala taseme primitivi, mis on ette nähtud struktuuride loomiseks, mis kasutavad tõhusalt mälu, näiteks nõrgad sõnastikud väärtuste sidumiseks, kanoniseerimise sõnastikud milleks iganes, mis ei kuulu unique, ja erinevat tüüpi vahemälu. Nende kasutusjuhtide toetamiseks pakub see väljaanne samuti runtime.AddCleanup ja maphash.Comparable.
Uus paket crypto/mlkem
Uus paket crypto/mlkem rakendab ML-KEM-768 ja ML-KEM-1024.
ML-KEM on post-kvantne 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õhise võtme genereerimise funktsiooni "Extract-and-Expand" HKDF, nagu on määratletud RFC 5869.
Uus paket crypto/pbkdf2 rakendab paroolipõhise võtme genereerimise funktsiooni PBKDF2, nagu on määratletud RFC 8018.
Uus paket crypto/sha3 rakendab hash-funktsioone SHA-3 ja SHAKE ning cSHAKE laiendatava väljundiga funktsioone, nagu on määratletud FIPS 202.
Kõik kolm paketti põhinevad varasematel pakettidel golang.org/x/crypto/…
FIPS 140-3 vastavus
See väljaanne sisaldab uut mehanismide komplekti, et tagada FIPS 140-3 vastavus.
Go krüptograafiline moodul on komplekt standardteegi sisemisi pakette, mida kasutatakse heaks kiidetud FIPS 140-3 algoritmide rakendamiseks. Rakendused ei vaja muudatusi Go krüptograafilise mooduli kasutamiseks heaks kiidetud algoritmidega.
Uut keskkonnamuutujat GOFIPS140 saab kasutada Go krüptograafilise mooduli versiooni valimiseks ehituses. Uut GODEBUG seadistus fips140 saab kasutada FIPS 140-3 režiimi lubamiseks käitamise ajal.
Go 1.24 sisaldab Go krüptograafilise mooduli versiooni v1.0.0, mis on praegu testimise all akrediteeritud CMVP labori poolt.
Uus eksperimentaalne paket testing/synctest
Uus eksperimentaalne paket testing/synctest pakub tuge konkreetse koodi testimisele.
- Funktsioon synctest.Run käivitab grupp gorutiine isoleeritud "mullis". Mullis töötlevad pakendi funktsioonid time töötlevad vale kellaaegu.
- Funktsioonid synctest.Wait ootavad, kuni kõik gorutiinid on praeguses mullis blokeeritud.
Üksikasju saab näha pakendi dokumentatsioonis.
Pakett synctest on eksperimenteerimise staadiumis ja peab olema aktiveeritud INSTALLIDES GOEXPERIMENT=synctest. Paketi API võib tulevastes väljaannetes muutuda. Rohkem üksikasju on #67434 saadaval ja tagasisidet saab anda.
Minor muutused raamatukogus
archive
Teostused (*Writer.AddFS) archive/zip ja archive/tar kirjutavad nüüd tühja katalooge jaoks katalooge.
bytes
Pakett bytes lisab mitmeid funktsioone, mis töötavad iteratooridega:
- Lines tagastab iteratoori ridadele, mis on eraldatud uue reaga, baitide slice'is.
- SplitSeq tagastab iteratoori kõigile al slice'idele baitide slice'is, mis on eraldatud eraldajaga.
- SplitAfterSeq tagastab iteratoori al slice'idele baitide slice'is, mis on eraldatud pärast iga eraldaja esinemist.
- FieldsSeq tagastab iteratoori al slice'idele baitide slice'is, mis asuvad tühikute järjestustes, nagu on määratletud unicode.IsSpace
- FieldsFuncSeq tagastab iteratoori al slice'idele baitide slice'is, mis asuvad Unicode koodipunktide järjestustes, mis vastavad predikaadile.
crypto/aes
Tagastatud väärtus NewChipher ei implementeeri enam meetodeid NewCTR, NewGCM, NewCBCEncrypter ja NewCBCDecrypter. Need meetodid olid dokumenteerimata ja ei olnud kõigil arhitektuuridel saadaval. Nüüd tagastatud väärtus Block peab olema otseselt edastatud vastavatesse funktsioonidesse crypto/cipher. Hetkel kontrollib crypto/cipher endiselt neid meetodeid Blocki väärtustes, isegi kui need ei ole enam standardraamatukogus toetatud.
crypto/cipher
Uus funktsioon NewGCMWithRandomNonce toob tagasi AEAD, mis implementerib AES-GCM, genereerides juhusliku ühekordse numbri ajal Seal ja lisades selle krüpteeritud teksti algusesse.
Rakendamine Stream, tagastatud NewCTR kasutamisel koos crypto/aes on nüüd mitu korda kiirem amd64 ja arm64.
NewOFB, NewCFBEncrypter ja NewCFBDecrypter on nüüd deklareeritud aegunud. OFB ja CFB režiimid pole autentitud, mis üldiselt võimaldab aktiivsetel rünnakutel manipuleerida ja taastada selget teksti. Rakendustele soovitatakse kasutada AEAD selle asemel. Kui autentimata režiim Stream on vajalik, võib kasutada NewCTR selle asemel.
crypto/ecdsa
PrivateKey.Sign loob nüüd deterministliku allkirja vastavalt RFC 6979, kui juhuslikkuse allikas on nil.
crypto/md5
Tagastatud väärtus md5.New, implementerib nüüd samuti liidese encoding.BinaryAppender.
crypto/rand
Funktsioon Loe garantii, et ebaõnnestumisi ei toimu. Kui Read puutub kokku veaga lugemisel Reader, lõpetab programm kindlasti töö. Pange tähele, et vaikimisi Reader on dokumenteeritud alati õnnestuma, seega peaks see muudatus mõjutama ainult neid programme, mis üle kirjutavad Readeri muutuja. Üheks erandiks on Linuxi kärud, mis on vanemad kui versioon 3.17, kus vaikimisi Reader avab endiselt /dev/urandom ja võib ebaõnnestuda.
Linux 6.11 ja uuel versioonil kasutab Reader nüüd süsteemikutsungit getrandom vDSO kaudu. See on mitu korda kiirem, tavaliselt väikeste lugemiste jaoks.
OpenBSD-l kasutab Reader nüüd arc4random_buf(3).
Uus funktsioon Tekst võib nüüd genereerida krüptograafiliselt turvalisi juhuslikke tekstirekke.
crypto/rsa
GenerateKey tagastab nüüd vea, kui küsitakse võtit, mille pikkus on alla 1024 bitti. Kõik meetodid Sign, Verify, Encrypt ja Decrypt tagastavad nüüd vea, kui neid kasutatakse alla 1024 bitti suuruse võtmega. Sellised võtmed on ebausaldusväärsed ja neid ei tohiks kasutada. GODEBUG seadistus rsa1024min=0 taastab vana käitumise, kuid Go arendajad soovitavad seda teha ainult vajadusel ja ainult testides, näiteks lisades faili testis rea //go:debug rsa1024min=0. Uus näide GenerateKey pakub lihtsalt kasutatavat standardsest 2024-bitist testvõtit.
Nüüd on ohutu ja tõhusam kutsuda PrivateKey.Precompute kuni PrivateKey.Validate. Precompute on nüüd kiiremini osaliselt täidetud PrecomputedValues, näiteks JSON-ist võtme väljavõtmisel.
Pakett lükkab nüüd tagasi rohkem vale võtmeid, isegi kui Validate ei ole kutsutud, ja GenerateKey nüüd võib tagastada uusi vigu katkisest juhuslikkuse allikast. Alad Primes ja Precomputed struktuurid PrivateKey kasutatakse ja valideeritakse nüüd isegi siis, kui mõned väärtused puuduvad. Samuti on tehtud muudatusi crypto/x509 RSA võtmete parsimise ja väljavõtmise osas, nagu allpool kirjeldatud.
SignPKCS1v15 ja VerifyPKCS1v15 nüüd toetavad SHA-512/224, SHA-512/256 ja SHA-3.
GenerateKey kasutab nüüd veidi teistsugust meetodit privaatse ekspotentiaali genereerimiseks (Carmichael'i funktsioon Eulers'i funktsiooni asemel). Erakordsed rakendused, mis väljastpoolt genereerivad võtmeid ainult algarvudest, võivad luua erinevaid, kuid ühilduvaid tulemusi.
Avalike ja eraklike võtmete operatsioonid on nüüd wasm-il kuni kaks korda kiirem.
crypto/sha*
- crypto/sha1: väärtus, mida tagastab sha1.New toetab nüüd ka liidest encoding.BinaryAppender.
- crypto/sha256: väärtused, mida tagastavad sha256.New ja sha256.New224 toetavad nüüd ka liidest encoding.BinaryAppender.
- crypto/sha512: väärtused, mida tagastavad sha512.New, sha512.New384, sha512.New512_224 ja sha512.New512_256, toetavad nüüd ka liidest encoding.BinaryAppender.
crypto/subtle
Uus funktsioon WithDataIndependentTiming lubab see, mis võimaldab kasutajal täita funktsiooni, millel on arhitektuuri spetsiifilised omadused, mis tagavad teatud käskude muutumatuse andmete väärtuse ajas. Seda saab kasutada selleks, et veenduda, et kood, mis on loodud töötama konstantses ajas, ei ole protsessori tasandi omaduste tõttu optimeeritud nii, et see toimiks muutuvates aegades. Praegu kasutab WithDataIndependentTiming bit PSTATE.DIT arm64-l ja ei tee muude arhitektuuride puhul midagi. GODEBUG seadistus dataindependenttiming=1 lubab DIT režiimi kogu Go programmile.
Kokkuvõte XORBytes peab kattuma täielikult või mitte midagi sisendiga. Varasem käitumine oli vastasel juhul määramata, samas kui nüüd paneb XORBytes paanikasse.
crypto/tls
TLS server toetab nüüd Encrypted Client Hello (ECH). Seda funktsiooni saab lubada täites väljundi Config.EncryptedClientHelloKeys.
Uus post-kvantaalne võtmevahetuse mehhanism X25519MLKEM768 on nüüd toetatud ja lubatud vaikeväärtusena, kui Config.CurvePreferences on nil. GODEBUG seadistus tlsmlkem=0 tagastab vaikeväärtuse.
Eksperimentaalse võtmevahetuse X25519Kyber768Draft00 tugi on eemaldatud.
Võtmevahetuse järjekord töödeldakse nüüd täielikult crypto/tls paketi kaudu. Järjekord Config.CurvePreferences ignoreeritakse nüüd ja sisu kasutatakse ainult selleks, et määrata, millised võtmevahetused lubada, kui väljund on täidetud.
Uus väli ClientHelloInfo.Extensions loetleb Client Hello sõnumis saadud laienduste identifikaatorite nimekirja. See võib olla kasulik TLS-kliendi sõrmejälgede võtmiseks.
crypto/x509
GODEBUG seadistus x509sha1 on eemaldatud. Certficicate.Verify toetab enam mitte SHA-1 põhiseid allkirju.
OID rakendab nüüd liideseid encoding.BinaryAppender ja encoding.TextAppender.
Sertifikaadi poliitikate vaikeväli on muutunud Certificate.PolicyIdentifiers . Tundub, et Certificate.Policies. Sertifikaate tõlgendades täidetakse mõlemad väljad, kuid sertifikaadipoliitikate loomisel võetakse need välja Certificate.Policies väljalt asemel Certificate.PolicyIdentifiers. See muudatus võib olla tagastatud GODEBUG seadistusega x509usepolicies=0.
CreateCertificate genereerib nüüd seerianumbri, kasutades RFC 5280 ühilduvat meetodit, edastades malli kaudu Certificate.SerialNumber nil, selle asemel, et see ebaõnnestuks.
Certificate.Verify toetab nüüd poliitika valideerimist nagu määratletud RFC 5280 ja RFC 9618. Uus väli VerifyOptions.CertificatePolicies võib seadistada vastuvõetavaks poliitikate kogumikuks OIDs. Ainult kehtivad poliitikagraafidega sertifikaadiketid tagastatakse Certificate.Verify.
MarshalPKCS8PrivateKey nüüd tagastab vea asemel vale RSA-võtme ekstraktsiooni. (MarshalPKCS1PrivateKey ei tagasta viga ja selle käitumine vale võtmete korral jääb endiselt määramatuks.)
ParsePKCS1PrivateKey ja ParsePKCS8PrivateKey kasutavad nüüd ja valideerivad kodeeritud CRT väärtusi, seega võivad nad tagasi lükata vale RSA-võtmed, mis olid varem 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-failides (Executable and Linkable Format). Uus meetod File.DynamicVersions tagastab dünaamiliste versioonide nimekirja, mis on määratud ELF-failis. Uus meetod File.DynamicVersionNeeds tagastab dünaamiliste versioonide nimekirja, mida see ELF-fail vajab ja mis on määratletud teistes ELF-objektides. Lõpuks uued vähi Symbol.HasVersion ja Symbol.VersionIndex näitavad sümboli versiooni.
encoding
Kaks uut liidest TextAppender ja BinaryAppender on tutvustatud tekstilise või binaarse esitusviisi lisamiseks objekti bajttükkide hulka. Need liidesed pakuvad samu funktsioone nagu TextMarshaler ja BinaryMarshaler, kuid selle asemel, et iga kord uut bajttükki reserveerida, lisavad nad andmed otse olemasolevasse bajttüki. Need liidesed on nüüd rakendatud standardteegi liikmetes, mis juba rakendavad TextMarshaler ja/või BinaryMarshaler.
encoding/json
Koostamisel struktuuri välja uue omitzero valikuga struktuuri välja silti hakatakse vahele jätma, kui selle väärtus on null. Kui välja tüüp sisaldab meetodit IsZero() bool, kasutatakse seda, et määrata, kas väärtus on null. Vastasel juhul on see väärtus null, kui see on selle tüübi nullväärtus. Omitszero välja silt on puhtam ja vähem vigu tekitav kui omitempty, kui soov on vahele jätta nullväärtused. Eelkõige, erinevalt omitempty'ist, jätab omitzero vahele nullid time.Time väärtused, mis on sage probleemide allikas.
Kui mõlemad omitempty ja omitzero on määratud, jääb väli vahele, kui väärtus on tühi või null (või koos).
UnmarshalTypeError.Field sisaldab nüüd sisseehitatud struktuure, et anda üksikasjalikumate veateatiste jaoks.
go/types
Kõik andmestruktuurid go/types, mis avavad paaride meetodite järjestused, nagu Len() int ja At(int) T, omavad nüüd ka meetodeid, mis tagastavad iteratoore, võimaldades lihtsustada 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: väärtus, mida tagastab Uus, implementerib nüüd samuti liidese encoding.BinaryAppender
- hash/crc32: väärtused, mida tagastavad Uus ja NewIEEE, toetavad nüüd ka liidest encoding.BinaryAppender
- hash/crc64: väärtus, mida tagastab Uus, implementerib nüüd samuti liidese encoding.BinaryAppender
- hash/fnv: väärtused, mida tagastavad New32 New32a New64 New64a New128 ja New128a, toetavad nüüd ka liidest encoding.BinaryAppender
- hash/maphash: uued funktsioonid Comparable ja WriteComparable saavad arvutada mis tahes väärtuse räsist, mida saab võrrelda. See võimaldab räsida kõike, mida saab kasutada Go sõnastiku võtmena.
log/slog
Uus DiscardHandler on töötleja, mis ei kunagi aktiveeru ja alati loobib oma väljundi.
Tase ja LevelVar rakendavad nüüd liidese encoding.TextAppender.
math/*
- math/big: Float, Int ja Rat rakendavad nüüd liidese encoding.TextAppender.
- math/rand: vananenud kõrgetasemelise funktsiooni kutsed Seed ei oma enam mingit mõju. Vanade käitumise taastamiseks saab kasutada seade GODEBUG randseednop=0. Rohkem konteksti leiate pakkumisest 67273.
- math/rand/v2: ChaCha8 ja PCG rakendavad nüüd liidese encoding.BinaryAppender.
net
ListenCondig kasutab nüüd MPTCP vaikimisi süsteemides, kus see on toetatud (praegu ainult Linux).
IP rakendavad nüüd liidese encoding.TextAppender.
net/http
Muudatus on tehtud piirangule Transport vastuseks saadud teabe 1xx kohta, vastuseks päringule. Varem katkestas see päringu ja tagastas vea, kui saadi rohkem kui 5 1xx vastust. Nüüd tagastab see vea ainult siis, kui kõik 1xx vastuste kogumaht ületab konfiguratsiooni seadistuse Transport.MaxResponseHeaderBytes.
Lisaks, kui päringul on jälgimise hook net/http/httptrace.ClientTrace.Got1xxResponse, ei ole nüüd piire kogu 1xx vastuste arvu osas. Hook Got1xxResponse võib tagastada vea päringu peatamiseks.
Transport ja Server omavad nüüd HTTP2 välja, mis võimaldab seadistada HTTP/2 protokolli seadeid.
Uued väljad Server.Protocols ja Transport.Protocols pakuvad lihtsat viisi konfigureerida, milliseid HTTP protokolle server või klient kasutavad.
Server ja klient saab konfigureerida toetama krüpteerimata HTTP/2 ühendusi.
Kui Server.Protocols sisaldab UnencrypterHTTP2, server aktsepteerib HTTP/2 ühendusi krüpteerimata sadamates. Server võib sama sadama peal aktsepteerida nii HTTP/1 kui ka krüpteerimata HTTP/2.
Kui Transport.Protocols sisaldab UnencryptedHTTP2 ja ei sisalda HTTP1, transport kasutab krüpteerimata HTTP/2 aadresside jaoks http://. Kui transport on konfigureeritud kasutama nii HTTP/1 kui ka krüpteerimata HTTP/2, siis kasutatakse HTTP/1.
Krüpteerimata HTTP/2 tugi kasutab "HTTP/2 eelneva teadlikkuse" (RFC 9113, jaotis 3.3). Aegunud päis "Upgrade: h2c" ei ole toetatud.
net/netip
Addr, AddrPort ja Prefix rakendavad nüüd liideseid encoding.BinaryAppender ja encoding.TextAppender.
net/url
URL toetab nüüd ka liidest encoding.BinaryAppender.
os/user
Windowsis Current saab nüüd kasutada Windows Nano Serveris. Teostust on uuendatud, et vältida NetApi32 raamatukogust sõltuvate funktsioonide kasutamist, mis ei ole Nano Serveris olemas.
Windowsis Current, Lookup ja LookupId toetavad nüüd järgmisi sisseehitatud teenusekasutaja konto:
- NT AUTHORITYSYSTEM
- NT AUTHORITYLOCAL SERVICE
- NT AUTHORITYNETWORK SERVICE
Windowsis Current oli märkimisväärselt kiirem, kui praegune kasutaja on aeglases domeenis, mis on paljude ettevõtete kasutajate puhul tavaline. Uue teostuse jõudlus on nüüd millisekundite piires, võrreldes varasema teostusega, mis võis võtta mitu sekundit, isegi minuteid, kuni lõpetamiseni.
Windowsis Current tagastab nüüd protsessi omaniku kasutaja, kui praegune thread esitleb end teise kasutajana. Varem tagastas see tõrke.
regexp
Regexp rakendavad nüüd liidese encoding.TextAdapter.
runtime
Funktsioon GOROOT on nüüd deklareeritud aegunuks. Uues koodis tuleks eelistada süsteemiteed binaari "go" määramiseks ning kasutada go env GOROOT, et määrata GOROOT.
strings
Pakett strings lisab mitmeid funktsioone iteratsioonide töötlemiseks:
- Lines tagastab iteratsiooni ridade kaupa, mis on jagatud uuega.
- SplitSeq tagastab iteratsiooni kõikide alamstringide üle, mis on jagatud eraldajaga.
- SplitAfterSeq tagastab iteratsiooni alamstringide üle, mis on jagatud pärast iga eraldaja esinemist.
- FieldsSeq tagastab iteratsiooni alamstringide üle, mis on jagatud tühikute järjestuste ümber, nagu määratletudunicode.IsSpace
- FieldsFuncSeq tagastab iteratsiooni alamstringide üle, mis on jagatud Unicode'i koodipunktide järjestuste ümber, mis vastavad predikaadile.
sync
Rakendamine sync.Map on muudetud, parandades jõudlust, eelkõige sõnaraamatu muudatuste jaoks. Näiteks on vähem tõenäoline, et madala konkurentsiga sõnaraamatute muutuste vahel on konflikt, ja enam ei ole vaja koormuse saavutamise aega madala konkurentsiga sõnaraamatust.
Kui te kohtate probleeme, seadke GOEXPERIMENT=nosynchashtriemap ehituse ajal, et naasta vana rakenduse juurde ja palun, täitke probleemi vorm.
testimine
Uued meetodid T.Kontekst ja B.Kontekst tagastavad konteksti, mis tükeldatakse pärast testi lõpetamist ja enne testipuhastusfunktsioonide täitmist.
Uued meetodid T.Chdir ja B.Chdir võib kasutada töökausta muutmiseks testi või mõõtesessiooni ajal.
text/template
Mallid toetavad nüüd range üle-funktsiooni ja range üle-int.
time
Aeg rakendab nüüd liideseid encoding.BinaryAppender ja encoding.TextAppender.
Sadulad
Linux
Kuidas oli aeti välja Go 1.23 väljalasketeates, Go 1.24 nõuab Linuxi kernelit versioon 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
Kompilaatori direktiiv go:wasmexport on lisatud Go programmidesse funktsioonide eksportimiseks WebAssembly hosti.
WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 toetab Go programmi ehitamist nagu reactor/library kasutades ehituse lippu -buildmode=c-shared.
Rohkem tüüpe on nüüd lubatud argumentide või tulemuste tüüpidena go:wasmimport funktsioonide jaoks. Eriti on lubatud bool, string, uintptr ja näidikud teatud tüüpidele (veel üksikasju vaadake dokumentatsioon), koos 32-bitiste ja 64-bitiste täisarvude ja ujukomaarvudega, ning unsafe.Pointer, mis on juba lubatud. Need tüübid on samuti lubatud argumentide või tulemuste tüüpidena go:wasmexport funktsioonide jaoks.
WebAssembly tugifailid on kolitud lib/wasm kausta miscast/wasm.
Algne mälu suurus on oluliselt vähenenud, eriti väikeste WebAssembly rakenduste puhul.
Windows
32-bitine windows/arm port (GOOS=windows GOARCH=arm) on tähistatud kui rikutud. Üksikasjad #70705
Allikas: linux.org.ru
