Nové vydanie jazyka Go, verzia 1.24, prichádza o šesť mesiacov neskôr Choďte na 1.23. Väčšina zmien sa týka implementácie toolchainu, runtime a knižníc. Ako vždy, vydanie poskytuje prísľub kompatibility Go 1. Návrhári jazyka očakávajú, že takmer všetky programy Go sa budú naďalej kompilovať a spúšťať ako predtým.
Zmeny v jazyku
Go 1.24 teraz plne podporuje aliasy všeobecného typu: alias typu môže byť parametrizovaný ako deklarovaný typ. Podrobnosti v jazykové špecifikácie. Zatiaľ je možné túto funkciu vypnúť nastavením GOEXPERIMENT=noaliastypeparams; Voľba aliastypeparams však bude v Go 1.25 odstránená.
Nástroje
Príkaz Choď
Moduly Go teraz môžu sledovať spustiteľné závislosti pomocou direktívy nástroja v go.mod. Toto odstraňuje potrebu predchádzajúceho riešenia pridávania nástrojov ako prázdnych importov do súboru, ktorý sa zvyčajne nazýva „tools.go“. Príkaz go tool teraz môže spúšťať tieto nástroje ako doplnok k nástrojom, ktoré sú súčasťou Go. Viac informácií nájdete na dokumentáciu.
Nový príznak -tool pre go get spôsobí, že sa do aktuálneho modulu okrem pridania požadovaných direktív pridajú aj direktívy nástroja pre špecifikované balíky.
Nový nástroj meta-vzorov sa vzťahuje na všetky nástroje v aktuálnom module. Toto je možné použiť na ich aktualizáciu pomocou nástroja go get alebo na ich inštaláciu do vášho adresára GOBIN pomocou nástroja na inštaláciu.
Spustiteľné súbory vytvorené cez go run a nové správanie go nástroja sú teraz uložené vo vyrovnávacej pamäti Go build. To umožňuje opakované spustenie vďaka zvýšenej vyrovnávacej pamäti. # 69290.
Príkazy go build and go install teraz akceptujú príznak -json, ktorý hlási výstup zostavy a chyby ako štruktúrovaný výstup JSON na štandardnom výstupe. Podrobnosti o formáte nájdete v go help buildjson.
Ďalej go test -json teraz hlási chyby výstupu a zostavy v JSON, zmiešané s výsledkom testu JSON. Možno ich rozlíšiť podľa nových typov akcií, ale ak spôsobujú problémy v testovacom integračnom systéme, môžete sa vrátiť k textovému výstupu zostavy cez Nastavenie GODEBUG gotestjsonbuildtext=1.
Nová premenná prostredia GOAUTH poskytuje flexibilný spôsob autorizácie súkromných modulov. Podrobnosti môžete vidieť v goauth pomoci.
Príkaz go build je teraz nainštalovaný verzia hlavného modulu v skompilovanom binárnom súbore na základe značky a/alebo odovzdania kontroly verzií. V prípade nepotvrdených zmien sa pridá prípona +špinavá. Príznak -buildvcs=false možno použiť na vynechanie informácií o správe verzií z binárneho súboru.
Nový Nastavenie GODEBUG toolchaintrace=1 možno teraz použiť na sledovanie procesu výberu reťaze nástrojov v príkaze go.
Cgo
Cgo podporuje nové anotácie pre funkcie C na zlepšenie výkonu za behu. #cgo noescape cFunctionName informuje kompilátor, že pamäť odovzdaná funkcii C cFunctionName nie je escapovaná. #cgo nocallback cFunctionName hovorí kompilátoru, že funkcia C cFunctionName nevolá späť žiadne funkcie Go. Viac informácií nájdete na cgo dokumentácia.
Cgo v súčasnosti odmieta kompilovať volania funkcie C, ktorá má viacero nekompatibilných deklarácií. Napríklad, ak je f deklarované ako void f(int) aj void f(double), cgo ohlási chybu namiesto možného vygenerovania neplatnej volacej sekvencie f(0). Novinkou v tomto vydaní je vylepšená detekcia tohto chybového stavu, keď sa v rôznych súboroch objavia nekompatibilné deklarácie. # 67699.
Objdump
Nástroj objdump teraz podporuje demontáž na 64-bitovom LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) a S390X (GOARCH=s390x).
Tuk
Nový analyzátor testov hlási bežné chyby v testoch, fuzzeroch, benchmarkoch a vzorových deklaráciách v testovacích balíkoch, ako sú chybné názvy, neplatné podpisy alebo príklady, ktoré dokumentujú neexistujúce identifikátory. Niektoré z týchto chýb môžu spôsobiť zlyhanie testov.
Existujúci syntaktický analyzátor printf teraz hlási diagnostiku volaní vo forme fmt.Printf(s), kde s je reťazec nekonštantného formátu bez iných argumentov. Takéto volania sú takmer vždy chybou, pretože hodnota s môže obsahovať znak %; namiesto toho použite fmt.Print. 60529. Táto kontrola má tendenciu nájsť veci v existujúcom kóde, a preto sa aplikuje iba vtedy, keď je jazyková verzia (ako je špecifikovaná v direktíve go súboru go.mod alebo v komentároch `//go:build`) aspoň Go 1.24, aby sa predišlo dlhým prerušeniam integrácie pri inovácii na reťazec nástrojov Go 1.24.
Existujúci analyzátor značiek zostavy teraz hlási diagnostiku, keď sa vyskytne nesprávna značka zostavy obmedzenie zostavenia staršej verzie Prejdite do direktívy //go:build. Napríklad //go:build go1.23.1 odkazuje na bodové vydanie; namiesto toho použite //go:build go1.23. # 64127.
Existujúci analyzátor copylock teraz hlási diagnostiku, keď je premenná deklarovaná v trojitej slučke „for“, ako napríklad for i := iter(); hotovo(i); i = next(i) { … }, obsahuje sync.Locker, ako je sync.Mutex. Choďte na 1.22 zmenilo správanie takýchto slučiek, aby sa vytvorila nová premenná pre každú iteráciu, kopírovaním hodnôt z predchádzajúcej iterácie; Toto kopírovanie nie je bezpečné pre zámky. # 66387.
GOCACHEPROG
Interný binárny a testovací mechanizmus ukladania do vyrovnávacej pamäte cmd/go je teraz možné implementovať podriadenými procesmi implementujúcimi protokol JSON medzi nástrojom cmd/go a podriadeným procesom pomenovaným premennou prostredia GOCACHEPROG. Predtým to bolo pre GOEXPERIMENT. Podrobnosti protokolu nájdete v dokumentáciu.
Čas dokončenia
Niekoľko vylepšení výkonu pri behu znížilo réžiu CPU v priemere o 2 až 3 % v rámci súboru reprezentatívnych benchmarkov. Výsledky sa môžu líšiť v závislosti od aplikácie. Tieto vylepšenia zahŕňajú novú vstavanú implementáciu mapy založenú na Švédske stolyefektívnejšiu alokáciu pamäte malých objektov a novú internú implementáciu mutexu.
Novú vstavanú implementáciu mapy a nový interný runtime mutex možno deaktivovať nastavením GOEXPERIMENT=noswissmap a GOEXPERIMENT=nospinbitmutex v čase zostavovania.
Kompilátor
Kompilátor už zakázal definovať nové metódy s typmi prijímačov, ktoré boli generované cgo, ale toto obmedzenie bolo možné obísť pomocou aliasu typu. Go 1.24 teraz vždy hlási chybu, ak prijímač označuje typ generovaný cgo, či už priamo alebo nepriamo (prostredníctvom aliasu typu).
Linker
Linker teraz generuje identifikátor zostavy GNU (ELF položka NT_GNU_BUILD_ID) na platformách ELF a UUID (Mach-O load command LC_UUID) na macOS v predvolenom nastavení. ID zostavy alebo UUID je odvodené od ID zostavy Go. Toto je možné vypnúť pomocou príznaku -B žiadny linker alebo prepísať príznakom linkera -B 0xNNNN s používateľom špecifikovanou hexadecimálnou hodnotou.
zalomenie
Ako je uvedené v Poznámky k vydaniu Go 1.22, Go 1.24 teraz vyžaduje, aby bol nainštalovaný Go 1.22.6 alebo novší. Vývojári očakávajú, že Go 1.26 bude vyžadovať vydanie Go 1.24 alebo novšieho.
Štandardná knižnica
Prístup k súborovému systému s obmedzeným prístupom
Nový typ os.root Poskytuje možnosť vykonávať operácie súborového systému v rámci špecifického adresára.
Funkcia os.OpenRoot otvorí adresár a vráti sa späť os.root. Metódy zapnuté os.root fungujú v tomto adresári a neumožňujú, aby cesty odkazovali na miesta mimo adresára, vrátane tých, ktoré nasledujú za symbolickými odkazmi mimo adresára. Metódy na os.Root odrážajú väčšinu operácií súborového systému dostupných v balíku os, vrátane napr. os.Root.Open, os.Root.Create, os.Root.Mkdir и os.Root.Stat.
Nová funkcia benchmarku
Benchmarky teraz môžu používať rýchlejšiu metódu, ktorá je menej náchylná na chyby testovanie.B.Slučka iterovať cez benchmark ako pre b.Loop() { … } namiesto typických štruktúr slučiek zahŕňajúcich bN ako pre rozsah bN Toto ponúka dve významné výhody:
- Funkcia benchmarku sa vykoná presne raz za počet, takže drahé kroky nastavenia a čistenia sa vykonajú iba raz.
- Parametre a výsledky volania funkcie žijú ďalej, čo bráni kompilátoru úplne optimalizovať telo slučky.
Vylepšené finalizátory
Nová funkcia runtime.AddCleanup je mechanizmus dokončovania, ktorý je flexibilnejší, efektívnejší a menej náchylný na chyby ako runtime.SetFinalizer. AddCleanup pripojí k objektu funkciu čistenia, ktorá sa spustí hneď, ako sa objekt stane nedostupným. Na rozdiel od SetFinalizer však možno k jednému objektu pripojiť viaceré vyčistenia, vyčistenia možno pripojiť k interným ukazovateľom, vyčistenia zvyčajne nespôsobujú úniky, keď objekty tvoria cyklus, a vyčistenia neodďaľujú uvoľnenie objektu alebo objektov, na ktoré ukazuje. Nový kód by mal uprednostniť AddCleanup pred SetFinalizer.
Nové slabé balenie
Nové balenie slabý poskytuje slabé ukazovatele.
Slabé ukazovatele sú nízkoúrovňové primitívy určené na vytváranie pamäťovo efektívnych štruktúr, ako sú slabé slovníky na mapovanie hodnôt, kanonizačné slovníky pre čokoľvek, čo nie je zahrnuté v balíku. unikátnya rôzne typy skrýš. Na podporu týchto prípadov použitia poskytuje aj toto vydanie runtime.AddCleanup и maphash.Porovnateľné.
Nový crypto/mlkem balíček
Nové balenie krypto/mlkem implementuje ML-KEM-768 a ML-KEM-1024.
ML-KEM je postkvantový mechanizmus výmeny kľúčov, predtým známy ako Kyber a špecifikovaný v FIPS 203.
Nové balíčky crypto/hkdf, crypto/pbkdf2 a crypto/sha3
Nové balenie krypto/hkdf implementuje funkciu odvodenia kľúča „Extract-and-Expand“ založenú na HMAC HKDF, ako je definované v RFC 5869.
Nové balenie krypto/pbkdf2 implementuje funkciu odvodenia kľúča založenú na hesle PBKDF2, ako je definovaná v RFC 8018.
Nové balenie krypto/sha3 implementuje hašovaciu funkciu SHA-3 a rozšíriteľné výstupné funkcie SHAKE a cSHAKE, ako je definované v FIPS 202.
Všetky tri balíčky sú založené na existujúcich balíčkoch golang.org/x/crypto/….
Súlad s FIPS 140-3
Toto vydanie obsahuje nový súbor mechanizmov na zabezpečenie súladu s FIPS 140-3.
Šifrovací modul Go je sada interných štandardných knižničných balíkov, ktoré sa transparentne používajú na implementáciu algoritmov schválených FIPS 140-3. Aplikácie nevyžadujú zmeny, aby mohli používať kryptografický modul Go pre schválené algoritmy.
Novú premennú prostredia GOFIPS140 možno použiť na výber verzie kryptomodulu Go, ktorý sa má použiť v zostave. Nové Nastavenie GODEBUG fips140 možno použiť na aktiváciu režimu FIPS 140-3 za behu.
Go 1.24 obsahuje kryptomodul Go v1.0.0, ktorý sa v súčasnosti testuje v laboratóriu akreditovanom CMVP.
Testovanie/synchronizácia nového experimentálneho balíka
Nový experimentálny balík testovanie/synchronizácia Poskytuje podporu pre testovanie súbežného kódu.
- Funkcia synctest.run vedie skupina gorutínov v izolovanej „bubline“. V bubline funkcie balíka čas fungovať na falošných hodinách.
- Funkcia synctest.čakať počkajte, kým sa v aktuálnej bubline nezablokujú všetky goroutiny.
Podrobnosti nájdete v dokumentácii balíka.
Balík synctest je experimentálny a musí byť povolený nastavením GOEXPERIMENT=synctest. Rozhranie API balíka sa môže v budúcich vydaniach zmeniť. IN # 67434 Môžete zobraziť ďalšie podrobnosti a poskytnúť spätnú väzbu.
Menšie zmeny v knižnici
archívne
Implementácie (*Writer.AddFS) v archívoch/zip a archive/tar teraz zapisujú hlavičku adresára pre prázdny adresár.
bajtov
balíček bajtov pridáva niekoľko funkcií, ktoré pracujú s iterátormi:
- Riadky Vráti iterátor cez reťazce oddelené novým riadkom v bajtovom reze.
- SplitSeq vráti iterátor nad všetkými podrezmi bajtového rezu oddelenými oddeľovačom.
- SplitAfterSeq vráti iterátor nad podrezmi bajtového rezu, rozdelený po každom výskyte oddeľovača.
- FieldsSeq vráti iterátor cez podrezy bajtového rezu okolo sekvencií medzerových znakov, ako je definované unicode.IsSpace
- FieldsFuncSeq vráti iterátor cez podrezy bajtového rezu okolo sekvencií bodov kódu Unicode, ktoré spĺňajú predikát.
krypto/aes
Návratová hodnota NewChipher už neimplementuje metódy NewCTR, NewGCM, NewCBCEncrypter a NewCBCDecrypter. Tieto metódy boli nezdokumentované a neboli dostupné na všetkých architektúrach. Teraz význam Blokovať musia byť odovzdané priamo príslušným funkciám krypto/šifra. V súčasnosti krypto/šifra stále kontroluje tieto metódy na hodnotách Block, aj keď už nie sú podporované štandardnou knižnicou.
krypto/šifra
Nová funkcia NewGCMWithRandomNonce sa vracia AEAD, ktorá implementuje AES-GCM vygenerovaním náhodného nonce počas pečate a jeho pridaním k šifrovému textu.
Реализация Prúd, vrátil Nová CTR pri použití s krypto/aes teraz niekoľkonásobne rýchlejšie na amd64 a arm64.
NewOFB, Nový CFBEncrypter и Nový CFBDecrypter sú teraz vyhlásené za zastarané. Režimy OFB a CFB nie sú overené, čo vo všeobecnosti umožňuje aktívnym útokom manipulovať a obnovovať otvorený text. Odporúča sa používať aplikácie AEAD na oplátku. Ak neoverený režim Prúd potrebné, možno použiť Nová CTR na oplátku.
krypto/ecdsa
PrivateKey.Sign teraz vytvorí deterministický podpis podľa RFC 6979, ak je zdroj náhodnosti nulový.
krypto/md5
Návratová hodnota md5.new, teraz tiež implementuje rozhranie kódovanie.binaryappender.
krypto/rand
Funkcia čítať teraz zaručuje žiadne zlyhania. Ak pri čítaní dôjde k chybe Čitateľ, program sa natrvalo ukončí. Upozorňujeme, že predvolená čítačka je zdokumentovaná tak, aby vždy fungovala úspešne, takže táto zmena by mala ovplyvniť iba programy, ktoré prepíšu premennú čítačky. Jednou výnimkou sú jadrá Linuxu staršie ako 3.17, kde predvolený čítač stále otvára /dev/urandom a môže zlyhať.
V systéme Linux 6.11 a novšom teraz Reader používa systémové volanie getrandom cez vDSO. Toto je niekoľkonásobne rýchlejšie, zvyčajne pre malé čítania.
Na OpenBSD Reader teraz používa arc4random_buf(3).
Nová funkcia text teraz dokáže generovať kryptograficky bezpečné náhodné textové reťazce.
krypto/rsa
GenerateKey teraz vracia chybu, ak je požadovaná dĺžka kľúča menšia ako 1024 bitov. Všetky metódy podpísať, overiť, zašifrovať a dešifrovať teraz vrátia chybu, ak sa použijú s veľkosťou kľúča menšou ako 1024 bitov. Takéto kľúče sú nebezpečné a nemali by sa používať. Nastavenie GODEBUG rsa1024min=0 obnoví staré správanie, ale vývojári Go odporúčajú robiť to iba v prípade potreby a iba v testoch, napríklad pridaním riadku //go:debug rsa1024min=0 do testovacieho súboru. Nové príklad GenerateKey poskytuje ľahko použiteľný štandardný 2024-bitový testovací kľúč.
Teraz je bezpečnejšie a efektívnejšie volať PrivateKey.Precompute na PrivateKey.Validate. Predvýpočet je teraz rýchlejší v prítomnosti čiastočne vyplneného PrecomputedValues, napríklad pri extrakcii kľúča z JSON.
Balík teraz odmieta viac neplatných kľúčov, aj keď sa nezavolá Validate, a GenerateKey teraz môže vrátiť nové chyby pre poškodené zdroje náhodnosti. Polia prvočísla и Predpočítané štruktúra PrivateKey sa teraz používajú a overujú, aj keď niektoré hodnoty chýbajú. Existujú aj zmeny v crypto/x509 na analýzu a extrahovanie kľúčov RSA, ktoré sú popísané nižšie.
SignPKCS1v15 и Overte PKCS1v15 teraz podporuje SHA-512/224, SHA-512/256 a SHA-3.
GenerateKey teraz používa na generovanie súkromného exponentu trochu inú metódu (funkcia Carmichael namiesto funkcie Euler). Zriedkavé aplikácie, ktoré externe regenerujú kľúče iba z prvočísel, môžu priniesť odlišné, ale kompatibilné výsledky.
Operácie s verejnými a súkromnými kľúčmi sú teraz na wasm až dvakrát rýchlejšie.
krypto/sha*
- krypto/sha1: návratová hodnota sha1.Novinka teraz tiež implementuje rozhranie kódovanie.binaryappender.
- krypto/sha256: vrátené hodnoty sha256.Novinka и sha256.New224 teraz tiež implementujte rozhranie kódovanie.binaryappender.
- krypto/sha512: vrátené hodnoty sha512.Novinka, sha512.New384, sha512.New512_224 и sha512.New512_256, teraz tiež implementujte rozhranie kódovanie.binaryappender.
krypto/jemné
Nová funkcia WithDataIndependentTiming umožňuje užívateľovi vykonávať funkciu s povolenými funkciami špecifickými pre architektúru, ktoré zabezpečujú, že určité inštrukcie sa nezmenia vzhľadom na čas hodnoty údajov. Toto možno použiť na zabezpečenie toho, aby kód napísaný na spustenie v konštantnom čase nebol optimalizovaný funkciami na úrovni procesora tak, aby bežal v premenlivom čase. V súčasnosti WithDataIndependentTiming používa bit PSTATE.DIT na arm64 a nerobí nič na všetkých ostatných architektúrach. Nastavenie GODEBUG dataindependenttiming=1 povolí režim DIT pre celý program Go.
Výkon XORBytes sa musí úplne alebo vôbec prekrývať so vstupom. Predtým bolo správanie inak nedefinované, zatiaľ čo teraz XORBytes prepadne panike.
krypto/tls
Server TLS teraz podporuje Encrypted Client Hello (ECH). Túto funkciu je možné aktivovať vyplnením poľa. Config.EncryptedClientHelloKeys.
Nový post-kvantový mechanizmus výmeny kľúčov X25519MLKEM768 teraz podporované a predvolene povolené, keď Config.CurvePreferences je nula. Nastavenie GODEBUG tlsmlkem=0 vráti predvolené nastavenie.
Podpora pre experimentálnu výmenu kľúčov X25519Kyber768Draft00 bola odstránená.
Objednávku výmeny kľúčov teraz úplne spravuje balík crypto/tls. Objednať Config.CurvePreferences sa teraz ignoruje a obsah sa používa iba na určenie, ktoré výmeny kľúčov sa majú zahrnúť, keď je pole vyplnené.
Nové pole ClientHelloInfo.Extensions Uvádza zoznam identifikátorov rozšírení prijatých v správe Client Hello. To môže byť užitočné pri snímaní odtlačkov prstov klientov TLS.
krypto/x509
Nastavenie GODEBUG x509sha1 bol odstránený. Certifikácia.Verify už nepodporuje podpisy založené na SHA-1.
OID teraz implementuje rozhrania kódovanie.binaryappender и kódovanie.TextAppender.
Predvolené pole certifikačnej politiky bolo zmenené z Certificate.PolicyIdentifiers na Certifikát.Zásady. Pri analýze certifikátov sa vyplnia obe polia, ale pri vytváraní politiky certifikátov sa prevezmú z poľa Certificate.Policies namiesto Certificate.PolicyIdentifiers. Túto zmenu je možné vrátiť späť. Nastavenie GODEBUG x509usepolicy=0.
CreateCertificate teraz pri odovzdávaní poľa šablóny vygeneruje sériové číslo pomocou metódy kompatibilnej s RFC 5280 Certifikát.Sériové číslo nula, namiesto zrútenia.
Certifikát.Overiť teraz podporuje validáciu politiky definovanú v RFC 5280 a RFC 9618. Nové pole VerifyOptions.CertificatePolicies možno nastaviť na prijateľný súbor politík OID. Vrátia sa iba reťazce certifikátov s platnými grafmi politík Certifikát.Overiť.
MarshalPKCS8PrivateKey teraz namiesto získania neplatného kľúča RSA vráti chybu. (MarshalPKCS1PrivateKey nemá žiadny chybový návrat a jeho správanie pri zadaní neplatných kľúčov zostáva nedefinované.)
ParsePKCS1PrivateKey и ParsePKCS8PrivateKey teraz používajte a overujte zakódované hodnoty CRT, takže môžete odmietnuť neplatné kľúče RSA, ktoré boli predtým akceptované. Použitie nastavenia GODEBUG x509rsacrt=0 sa vráti k prepočítaniu hodnôt CRT.
debug/elf
balíček debug/elf Pridáva podporu pre spracovanie verzií symbolov v dynamických súboroch ELF (Executable and Linkable Format). Nová metóda File.DynamicVersions Vráti zoznam dynamických verzií definovaných v súbore ELF. Nová metóda File.DynamicVersionNeeds Vráti zoznam dynamických verzií požadovaných týmto súborom ELF, ktoré sú definované v iných objektoch ELF. Konečne nové polia Symbol.HasVersion и Symbol.VersionIndex uveďte verziu symbolu.
kódovanie
Dve nové rozhrania TextAppender и BinaryAppender boli zavedené na pridanie textu alebo binárnej reprezentácie objektu do bajtového rezu. Tieto rozhrania poskytujú rovnakú funkcionalitu ako TextMarshaler и BinaryMarshaler, ale namiesto toho, aby zakaždým pridelili nový segment, pridajú údaje priamo k existujúcemu segmentu. Tieto rozhrania sú v súčasnosti implementované štandardnými typmi knižníc, ktoré už implementujú TextMarshaler a/alebo BinaryMarshaler.
kódovanie/json
Pri vytváraní bude pole štruktúry s novou možnosťou vynechať v značke poľa štruktúry vynechané, ak je jeho hodnota nula. Ak má typ poľa boolovu metódu IsZero(), použije sa na určenie, či je hodnota nula. V opačnom prípade bude hodnota nulová nulová hodnota pre jeho typ. Značka poľa omitzero je čistejšia a menej náchylná na chyby ako omitempty, keď je zámerom vynechať nulové hodnoty. Najmä, na rozdiel od omitempty, omitzero vynecháva nuly čas.čas hodnoty, čo je častým zdrojom problémov.
Ak sú zadané omitempty aj omitzero, pole bude vynechané, ak je hodnota prázdna alebo nulová (alebo oboje).
UnmarshalTypeError.Field teraz obsahuje vstavané štruktúry na poskytovanie podrobnejších chybových hlásení.
ísť/typy
Všetky dátové štruktúry go/types, ktoré odhaľujú sekvencie párov metód, ako napríklad Len() int a At(int) T, teraz majú aj metódy, ktoré vracajú iterátory, čo umožňuje jednoduchší kód, ako je tento:
params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
Na tomto:
for param := rozsah fn.Signature().Params().Variables() { use(param) }
metódy: Interface.EmbeddedTypes Rozhranie.Explicitné metódy Rozhranie. Metódy MethodSet.Methods Pomenovaný.Metódy Rozsah.Deti Štruktúra.Polia Tuple.Premenné TypeList.Types TypeParamList.TypeParams Union.Podmienky
hash/*
- hash/adler32: návratová hodnota Nový, teraz tiež implementuje rozhranie kódovanie.binaryappender
- hash/crc32: vrátené hodnoty Nový и NovéIEEE, teraz tiež implementujte rozhranie kódovanie.binaryappender
- hash/crc64: návratová hodnota Nový, teraz tiež implementuje rozhranie kódovanie.binaryappender
- hash/fnv: vrátené hodnoty New32 Nové32a New64 Nové64a New128 и Nové128a, teraz tiež implementujte rozhranie kódovanie.binaryappender
- hash/maphash: nové funkcie Porovnateľné и Napíšte Porovnateľné dokáže vypočítať hash akejkoľvek hodnoty, ktorú možno porovnať. To vám umožní hašovať čokoľvek, čo sa dá použiť ako kľúč slovníka Go.
log/slog
Nový DiscardHandler je handler, ktorý nie je nikdy povolený a vždy zahodí svoj výstup.
Úroveň и LevelVar teraz implementujte rozhranie kódovanie.TextAppender.
matematika/*
- matematika/veľká: Plavák, Int и Krysa teraz implementujte rozhranie kódovanie.TextAppender.
- matematika/rand: zastarané volania funkcií najvyššej úrovne Semienko už nemajú žiadny účinok. Ak chcete obnoviť staré správanie, môžete použiť Nastavenie GODEBUG randseednop = 0. Viac kontextu v ponuka 67273.
- matematika/rand/v2: ChaCha8 и PCG teraz implementujte rozhranie kódovanie.binaryappender.
sieť
Počúvajte Condig teraz štandardne používa MPTCP na systémoch, kde je podporovaný (v súčasnosti iba Linux).
IP teraz implementuje rozhranie kódovanie.TextAppender.
net/http
Obmedzenie sa zmenilo transport na prijaté informačné odpovede 1xx ako odpoveď na požiadavku. Predtým by to zastavilo požiadavku a vrátilo chybu po prijatí viac ako 5 odpovedí 1xx. Toto teraz vráti chybu iba vtedy, ak celková veľkosť všetkých odpovedí 1xx prekročí nastavenie konfigurácie Transport.MaxResponseHeaderBytes.
Tiež, keď má žiadosť háčik na sledovanie net/http/httptrace.ClientTrace.Got1xxResponse, teraz už nie je obmedzený celkový počet odpovedí 1xx. Hák Got1xxResponse môže vrátiť chybu na zastavenie požiadavky.
transport и server teraz majú pole HTTP2, ktoré umožňuje konfiguráciu nastavení protokolu HTTP/2.
Nové polia Server.Protokoly и Doprava.Protokoly poskytujú jednoduchý spôsob konfigurácie, ktoré protokoly HTTP server alebo klient používa.
Server a klient môžu byť nakonfigurované tak, aby podporovali nešifrované pripojenia HTTP/2.
Kedy Server.Protokoly obsahuje UnencrypterHTTP2, server bude akceptovať pripojenia HTTP/2 na nešifrovaných portoch. Server môže akceptovať HTTP/1 aj nešifrovaný HTTP/2 na rovnakom porte.
Kedy Doprava.Protokoly obsahuje UnencryptedHTTP2 a neobsahuje HTTP1, prenos použije pre adresy nešifrovaný HTTP/2 http://. Ak je prenos nakonfigurovaný na používanie HTTP/1 aj nešifrovaného HTTP/2, bude používať HTTP/1.
Podpora pre nešifrovaný HTTP/2 používa „HTTP/2 s Forward-Learning“ (RFC 9113, časť 3.3). Zastaraná hlavička „Upgrade: h2c“ nie je podporovaná.
sieť/netip
adr, AddrPort и Predpona teraz implementujte rozhrania kódovanie.binaryappender и kódovanie.TextAppender.
net/url
URL teraz tiež implementuje rozhranie kódovanie.binaryappender.
operačný systém/používateľ
V systéme Windows prúd možno teraz použiť v systéme Windows Nano Server. Implementácia bola aktualizovaná, aby sa vyhlo používaniu funkcií z knižnice NetApi32, ktorá v Nano Serveri chýba.
V systéme Windows prúd, Vyhľadávanie и LookupId teraz podporuje nasledujúce vstavané používateľské servisné účty:
- NÝ AUTORISTICKÝ SYSTÉM
- NT AUTORITNÁ MIESTNA SLUŽBA
- NT AUTORITNÁ SIEŤOVÁ SLUŽBA
V systéme Windows prúd sa výrazne zrýchlilo, keď je aktuálny používateľ pripojený k pomalej doméne, čo je bežný prípad mnohých podnikových používateľov. Výkon novej implementácie je teraz rádovo v milisekúndách v porovnaní s predchádzajúcou implementáciou, ktorej dokončenie môže trvať niekoľko sekúnd, dokonca minút.
V systéme Windows prúd teraz vráti používateľa vlastníka procesu, keď sa aktuálne vlákno vydáva za iného používateľa. Predtým to vrátilo chybu.
regexp
Regexp teraz implementuje rozhranie kódovanie.TextAdapter.
runtime
Funkcia GOROOT je teraz zastarané. V novších prostrediach by ste mali radšej použiť systémovú cestu na definovanie binárneho súboru „go“ a na definovanie GOROOT použiť go env GOROOT.
reťazce
balíček reťazce pridáva niekoľko funkcií pre prácu s iterátormi:
- Riadky Vráti iterátor cez riadky v reťazci oddelené novým riadkom.
- SplitSeq vráti iterátor nad všetkými podreťazcami reťazca oddelenými oddeľovačom.
- SplitAfterSeq vráti iterátor nad podreťazcami reťazca, rozdelený po každom výskyte oddeľovača.
- FieldsSeq vráti iterátor nad podreťazcami reťazca okolo sekvencií prázdnych znakov, ako je definovanéunicode.IsSpace
- FieldsFuncSeq Vráti iterátor nad podreťazcami reťazca okolo sekvencií bodov kódu Unicode, ktoré spĺňajú predikát.
synchronizovať
Реализация sync.map bol zmenený, aby sa zlepšil výkon, najmä pre zmeny v slovníku. Napríklad spor o zmenu nesúvislých množín je menej pravdepodobný vo veľkých slovníkoch a už nevyžaduje čas na zostavenie na dosiahnutie nízkeho zaťaženia slovníka sporov.
Ak narazíte na nejaké problémy, počas zostavovania nastavte GOEXPERIMENT=nosynchashtriemap, aby ste sa vrátili späť k starej implementácii a prosím vyplňte problémový formulár.
Testovanie
Nové metódy T.Kontext и B. Kontext vráti kontext, ktorý sa zahodí po dokončení testu a pred vykonaním funkcií čistenia testu.
Nové metódy T.Chdir и B.Chdir možno použiť na zmenu pracovného adresára počas trvania testu alebo benchmarku.
text/šablónu
Šablóny teraz podporujú range-over-func a range-over-int.
čas
čas teraz implementuje rozhrania kódovanie.binaryappender и kódovanie.TextAppender.
porty
Linux
Ako to bolo oznámil Podľa poznámok k vydaniu Go 1.23 vyžaduje Go 1.24 jadro Linuxu verzie 3.2 alebo novšej.
Darwin
Go 1.24 je posledné vydanie, ktoré pobeží na macOS 11 Big Sur. Go 1.25 bude vyžadovať macOS 12 Monterey alebo novší.
WebAssembly
Do programov Go bola pridaná direktíva kompilátora go:wasmexport na export funkcií do hostiteľa WebAssembly.
Vo WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) podporuje Go 1.24 vytváranie programu Go ako reaktor/knižnica zadaním príznaku zostavenia -buildmode=c-shared.
Teraz je povolených viac typov ako typy argumentov alebo výsledkov pre funkcie go:wasmimport. Povolené sú najmä bool, string, uintptr a ukazovatele na určité typy (pozri podrobnosti v dokumentáciu), spolu s 32-bitovými a 64-bitovými celými číslami a typmi s pohyblivou rádovou čiarkou a unsafe.Pointer, ktoré sú už povolené. Tieto typy sú povolené aj ako typy argumentov alebo výsledkov pre funkcie go:wasmexport.
Podporné súbory pre WebAssembly boli presunuté do lib/wasm z misc/wasm.
Počiatočná pamäťová stopa je výrazne znížená, najmä pre malé aplikácie WebAssembly.
Windows
32-bitový port windows/arm (GOOS=windows GOARCH=arm) bol označený ako poškodený. Podrobnosti v # 70705
Zdroj: linux.org.ru
