Nové vydání jazyka Go, verze 1.24, přichází šest měsíců poté Přejděte na 1.23. Většina změn se týká implementace toolchainu, runtime a knihoven. Jako vždy, vydání poskytuje příslib kompatibility Go 1. Návrháři jazyků očekávají, že téměř všechny programy Go budou nadále kompilovat a spouštět jako dříve.
Změny v jazyce
Go 1.24 nyní plně podporuje aliasy obecného typu: alias typu lze parametrizovat jako deklarovaný typ. Podrobnosti v jazykové specifikace. Prozatím lze tuto funkci zakázat nastavením GOEXPERIMENT=noaliastypeparams; Možnost aliastypeparams však bude v Go 1.25 odstraněna.
Nástroje
Příkaz Jdi
Moduly Go nyní mohou sledovat spustitelné závislosti pomocí direktivy tool v go.mod. Tím odpadá potřeba předchozího řešení přidávat nástroje jako prázdné importy do souboru, který se obvykle nazývá „tools.go“. Příkaz go tool nyní může spouštět tyto nástroje navíc k nástrojům dodávaným s Go. Více informací naleznete na dokumentace.
Nový parametr -tool pro go get způsobí přidání direktiv nástroje do aktuálního modulu pro zadané balíčky kromě přidání direktiv required.
Nový nástroj meta-vzorů odkazuje na všechny nástroje v aktuálním modulu. To lze použít k aktualizaci všech pomocí nástroje go get nebo k jejich instalaci do vašeho adresáře GOBIN pomocí nástroje go install.
Spustitelné soubory vytvořené pomocí go run a nové chování nástroje go jsou nyní ukládány do mezipaměti sestavení Go. To umožňuje opakované spouštění díky zvýšené mezipaměti. #69290.
Příkazy go build and go install nyní přijímají příznak -json, který hlásí výstup sestavení a chyby jako strukturovaný výstup JSON na standardním výstupu. Podrobnosti o formátu lze vidět v go help buildjson.
Dále go test -json nyní hlásí chyby výstupu a sestavení v JSON, smíchané s výsledkem testu JSON. Lze je odlišit novými typy akcí, ale pokud způsobí problémy v testovacím integračním systému, můžete se vrátit k textovému výstupu sestavení pomocí Nastavení GODEBUG gotestjsonbuildtext=1.
Nová proměnná prostředí GOAUTH poskytuje flexibilní způsob, jak autorizovat soukromé stahování modulů. Podrobnosti můžete vidět v goauth pomoci.
Příkaz go build je nyní nainstalován verze hlavního modulu v zkompilovaném binárním souboru na základě tagu a/nebo potvrzení verze. Pokud dojde k nepotvrzeným změnám, bude přidána přípona +dirty. Parametr -buildvcs=false lze použít k vynechání informací o řízení verzí z binárního souboru.
nový Nastavení GODEBUG toolchaintrace=1 lze nyní použít ke sledování procesu výběru řetězce nástrojů v příkazu go.
Cgo
Cgo podporuje nové anotace pro funkce C pro zlepšení výkonu za běhu. #cgo noescape cFunctionName říká kompilátoru, že paměť předaná C funkci cFunctionName není escapována. #cgo nocallback cFunctionName sděluje kompilátoru, že funkce C cFunctionName nevolá zpět žádné funkce Go. Více informací naleznete na cgo dokumentace.
Cgo aktuálně odmítá kompilovat volání funkce C, která má více nekompatibilních deklarací. Například, pokud je f deklarováno jako void f(int) i void f(double), cgo ohlásí chybu místo možného generování neplatné volací sekvence f(0). Novinkou v této verzi je vylepšená detekce tohoto chybového stavu, když se v různých souborech objeví nekompatibilní deklarace. #67699.
Objdump
Nástroj objdump nyní podporuje demontáž na 64bitovém LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) a S390X (GOARCH=s390x).
Tuk
Nový analyzátor testů hlásí běžné chyby v testech, fuzzerech, benchmarkech a vzorových deklaracích v testovacích sadách, jako jsou chybná jména, neplatné podpisy nebo příklady, které dokumentují neexistující identifikátory. Některé z těchto chyb mohou způsobit selhání testů.
Stávající analyzátor printf nyní hlásí diagnostiku pro volání ve tvaru fmt.Printf(s), kde s je nekonstantní formátový řetězec bez dalších argumentů. Taková volání jsou téměř vždy chybou, protože hodnota s může obsahovat znak %; místo toho použijte fmt.Print. 60529. Tato kontrola má tendenci nacházet věci ve stávajícím kódu, a proto se použije pouze tehdy, když je jazyková verze (jak je specifikována direktivou go souboru go.mod nebo komentáři `//go:build`) alespoň Go 1.24, aby se předešlo dlouhým přerušením integrace při upgradu na nástroj Go 1.24.
Stávající analyzátor buildtag nyní hlásí diagnostiku, když je tam nesprávný buildtag omezení sestavení starší verze Přejděte do direktivy //go:build. Například //go:build go1.23.1 odkazuje na bodové vydání; místo toho použijte //go:build go1.23. #64127.
Stávající analyzátor copylock nyní hlásí diagnostiku, když je proměnná deklarována v trojité smyčce „for“, jako například for i := iter(); hotovo(i); i = next(i) { … }, obsahuje sync.Locker, jako je sync.Mutex. Přejděte na 1.22 změnil chování takových smyček tak, aby pro každou iteraci vytvořil novou proměnnou, zkopíroval hodnoty z předchozí iterace; Toto kopírování není bezpečné pro zámky. #66387.
GOCACHEPROG
Interní binární a testovací mechanismus mezipaměti cmd/go lze nyní implementovat podřízenými procesy implementujícími protokol JSON mezi nástrojem cmd/go a podřízeným procesem pojmenovaným proměnnou prostředí GOCACHEPROG. Dříve to bylo pro GOEXPERIMENT. Podrobnosti protokolu naleznete v dokumentace.
Čas dokončení
Několik vylepšení výkonu za běhu snížilo režii CPU v průměru o 2–3 % napříč sadou reprezentativních benchmarků. Výsledky se mohou lišit v závislosti na aplikaci. Tato vylepšení zahrnují novou vestavěnou implementaci map založenou na Švédské stoly, efektivnější alokace paměti malých objektů a nová interní implementace mutexu za běhu.
Novou vestavěnou implementaci mapy a nový interní runtime mutex lze zakázat nastavením GOEXPERIMENT=noswissmap a GOEXPERIMENT=nospinbitmutex v době sestavování.
Kompilátor
Kompilátor již zakázal definovat nové metody s typy přijímačů, které byly vygenerovány pomocí cgo, ale toto omezení bylo možné obejít pomocí aliasu typu. Go 1.24 nyní vždy hlásí chybu, pokud přijímač označuje typ generovaný cgo, ať už přímo nebo nepřímo (přes alias typu).
Linker
Linker nyní generuje identifikátor sestavení GNU (ELF položka NT_GNU_BUILD_ID) na platformách ELF a UUID (Mach-O load command LC_UUID) na macOS ve výchozím nastavení. ID sestavení nebo UUID je odvozeno od ID sestavení Go. Toto lze vypnout příznakem -B žádný linker nebo přepsat příznakem linkeru -B 0xNNNN s uživatelem zadanou hexadecimální hodnotou.
Podpora
Jak je uvedeno v Poznámky k vydání Go 1.22, Go 1.24 nyní vyžaduje instalaci Go 1.22.6 nebo novější. Vývojáři očekávají, že Go 1.26 bude vyžadovat vydání verze Go 1.24 nebo novější.
Standardní knihovna
Adresářově omezený přístup k systému souborů
Nový typ os.root Poskytuje možnost provádět operace souborového systému v rámci určitého adresáře.
Funkce os.OpenRoot otevře adresář a vrátí se os.root. Metody zapnuté os.root pracovat v tomto adresáři a neumožňují, aby cesty odkazovaly na umístění mimo adresář, včetně těch, které následují po symbolických odkazech mimo adresář. Metody na os.Root odrážejí většinu operací souborového systému dostupných v balíčku os, včetně např. os.Root.Open, os.Root.Create, os.Root.Mkdir и os.Root.Stat.
Nová funkce benchmarku
Benchmarky nyní mohou používat rychlejší metodu, která je méně náchylná k chybám testování.B.Smyčka iterovat přes benchmark jako u b.Loop() { … } namísto typických struktur smyček zahrnujících bN jako u rozsahu bN To nabízí dvě významné výhody:
- Funkce benchmarku se provádí přesně jednou za počet, takže nákladné kroky nastavení a čištění se provádějí pouze jednou.
- Parametry a výsledky volání funkce žijí dál, což brání kompilátoru v úplné optimalizaci těla smyčky.
Vylepšené finalizátory
Nová vlastnost runtime.AddCleanup je mechanismus dokončení, který je flexibilnější, efektivnější a méně náchylný k chybám než runtime.SetFinalizer. AddCleanup připojí k objektu funkci čištění, která bude spuštěna, jakmile bude objekt nedostupný. Na rozdíl od SetFinalizeru však může být k jednomu objektu připojeno více vyčištění, vyčištění lze připojit k interním ukazatelům, vyčištění obvykle nezpůsobí netěsnosti, když objekty tvoří cyklus, a vyčištění nezdrží dealokaci objektu nebo objektů, na které ukazuje. Nový kód by měl upřednostňovat AddCleanup před SetFinalizer.
Nové slabé balení
Nový balíček slabý poskytuje slabé ukazatele.
Slabé ukazatele jsou nízkoúrovňové primitivum určené k vytváření paměťově efektivních struktur, jako jsou slabé slovníky pro mapování hodnot, kanonizační slovníky pro cokoli, co není pokryto balíčkem. tlačítkoa různé typy keší. Na podporu těchto případů použití toto vydání také poskytuje runtime.AddCleanup и maphash.Porovnatelné.
Nový balíček krypto/mlkem
Nový balíček krypto/mlkem implementuje ML-KEM-768 a ML-KEM-1024.
ML-KEM je postkvantový mechanismus výměny klíčů, dříve známý jako Kyber a specifikovaný v FIPS 203.
Nové balíčky crypto/hkdf, crypto/pbkdf2 a crypto/sha3
Nový balíček krypto/hkdf implementuje funkci odvození klíče „Extract-and-Expand“ založenou na HMAC HKDF, jak je definována v RFC 5869.
Nový balíček krypto/pbkdf2 implementuje funkci odvozování klíče na základě hesla PBKDF2, jak je definována v RFC 8018.
Nový balíček krypto/sha3 implementuje hashovací funkci SHA-3 a rozšiřitelné výstupní funkce SHAKE a cSHAKE, jak je definováno v FIPS 202.
Všechny tři balíčky jsou založeny na stávajících balíčcích golang.org/x/crypto/….
Soulad s FIPS 140-3
Toto vydání zahrnuje nová sada mechanismů pro zajištění souladu s FIPS 140-3.
Šifrovací modul Go je sada interních standardních knihovních balíčků, které se transparentně používají k implementaci schválených algoritmů FIPS 140-3. Aplikace nevyžadují změny, aby mohly používat kryptomodul Go pro schválené algoritmy.
Novou proměnnou prostředí GOFIPS140 lze použít k výběru verze kryptomodulu Go pro použití v sestavení. Nový Nastavení GODEBUG fips140 lze použít k povolení režimu FIPS 140-3 za běhu.
Go 1.24 obsahuje kryptomodul Go v1.0.0, který je v současné době testován v laboratoři akreditované CMVP.
Nový experimentální balíček testování/synctest
Nový experimentální balíček testování/synchronizace Poskytuje podporu pro testování souběžného kódu.
- Funkce synctest.run provozuje skupinu goroutinů v izolované "bublině". V bublině funkce balíčku čas fungovat na falešných hodinách.
- funkce synctest.čekat počkejte, až budou všechny goroutiny zablokovány v aktuální bublině.
Podrobnosti naleznete v dokumentaci k balíčku.
Balíček synctest je experimentální a musí být povolen nastavením GOEXPERIMENT=synctest. Rozhraní API balíčku se může v budoucích verzích změnit. V #67434 Můžete zobrazit další podrobnosti a poskytnout zpětnou vazbu.
Drobné změny v knihovně
archiv
Implementace (*Writer.AddFS) v archive/zip a archive/tar nyní zapisují záhlaví adresáře pro prázdný adresář.
bajtů
Balíček bajtů přidává několik funkcí, které pracují s iterátory:
- Lines Vrátí iterátor přes řetězce oddělené novým řádkem v bajtovém řezu.
- SplitSeq vrátí iterátor přes všechny dílčí řezy bajtového řezu oddělené oddělovačem.
- SplitAfterSeq vrátí iterátor přes dílčí řezy bajtového řezu, rozdělený po každém výskytu oddělovače.
- PoleSeq vrátí iterátor přes dílčí řezy bajtového řezu kolem sekvencí mezerových znaků, jak je definováno unicode.IsSpace
- FieldsFuncSeq vrací iterátor přes dílčí řezy bajtového řezu kolem sekvencí bodů kódu Unicode splňující predikát.
krypto/aes
Návratová hodnota NewChipher již neimplementuje metody NewCTR, NewGCM, NewCBCEncrypter a NewCBCDecrypter. Tyto metody byly nezdokumentované a nebyly dostupné na všech architekturách. Nyní význam Blokovat musí být předány přímo příslušným funkcím krypto/šifra. V současné době crypto/cipher stále kontroluje tyto metody na hodnotách Block, i když již nejsou podporovány standardní knihovnou.
krypto/šifra
Nová vlastnost NewGCMWithRandomNonce se vrací AEAD, která implementuje AES-GCM vygenerováním náhodného nonce během Seal a jeho přidáním k šifrovanému textu.
uskutečnění Domů, vráceno NováCTR při použití s krypto/aes nyní několikrát rychlejší na amd64 a arm64.
NewOFB, Nový CFBEncrypter и Nový CFBDecrypter jsou nyní prohlášeny za zastaralé. Režimy OFB a CFB jsou neověřené, což obecně umožňuje aktivním útokům manipulovat a obnovovat prostý text. Doporučuje se používat aplikace AEAD na oplátku. V případě neověřeného režimu Domů nutné, lze použít NováCTR na oplátku.
krypto/ecdsa
PrivateKey.Sign nyní vytvoří deterministický podpis podle RFC 6979, pokud je zdroj náhodnosti nulový.
krypto/md5
Návratová hodnota md5.new, nyní také implementuje rozhraní kódování.binaryappender.
krypto/rand
Funkce číst nyní zaručuje žádné poruchy. Pokud při čtení dojde k chybě Čtenář, program bude trvale ukončen. Všimněte si, že je zdokumentováno, že výchozí čtečka vždy funguje úspěšně, takže tato změna by měla ovlivnit pouze programy, které přepisují proměnnou čtečky. Jedinou výjimkou jsou linuxová jádra starší než 3.17, kde výchozí Reader stále otevírá /dev/urandom a může selhat.
V systému Linux 6.11 a novějším nyní Reader používá systémové volání getrandom prostřednictvím vDSO. To je několikrát rychlejší, obvykle pro malé čtení.
Na OpenBSD Reader nyní používá arc4random_buf(3).
Nová vlastnost Text nyní může generovat kryptograficky bezpečné náhodné textové řetězce.
krypto/rsa
GenerateKey nyní vrací chybu, pokud je požadována délka klíče menší než 1024 bitů. Všechny metody Sign, Verify, Encrypt a Decrypt nyní vracejí chybu, pokud jsou použity s velikostí klíče menší než 1024 bitů. Takové klíče jsou nebezpečné a neměly by se používat. Nastavení GODEBUG rsa1024min=0 obnovuje staré chování, ale vývojáři Go to doporučují dělat pouze v případě potřeby a pouze v testech, například přidáním řádku //go:debug rsa1024min=0 do testovacího souboru. Nový příklad GenerateKey poskytuje snadno použitelný standardní 2024bitový testovací klíč.
Nyní je bezpečnější a efektivnější volat PrivateKey.Precompute na PrivateKey.Validate. Předvýpočet je nyní rychlejší v přítomnosti částečně vyplněného PrecomputedValues, například při extrahování klíče z JSON.
Balíček nyní odmítá více neplatných klíčů, i když není voláno Validate, a GenerateKey nyní může vracet nové chyby pro poškozené zdroje náhodnosti. Pole Primes и Předpočítané struktura PrivateKey se nyní používají a ověřují, i když některé hodnoty chybí. Existují také změny v crypto/x509 pro analýzu a extrahování klíčů RSA, které jsou popsány níže.
SignPKCS1v15 и Ověřte PKCS1v15 nyní podporuje SHA-512/224, SHA-512/256 a SHA-3.
GenerateKey nyní používá pro generování soukromého exponentu mírně odlišnou metodu (Carmichaelova funkce místo Eulerovy funkce). Vzácné aplikace, které externě regenerují klíče pouze z prvočísel, mohou produkovat odlišné, ale kompatibilní výsledky.
Operace s veřejnými a soukromými klíči jsou nyní na wasm až dvakrát rychlejší.
krypto/sha*
- krypto/sha1: návratová hodnota sha1.Nové nyní také implementuje rozhraní kódování.binaryappender.
- krypto/sha256: vrácené hodnoty sha256.Nové и sha256.Nové224 nyní také implementujte rozhraní kódování.binaryappender.
- krypto/sha512: vrácené hodnoty sha512.Nové, sha512.Nové384, sha512.New512_224 и sha512.New512_256, nyní také implementujte rozhraní kódování.binaryappender.
krypto/jemný
Nová vlastnost WithDataIndependentTiming umožňuje uživateli provádět funkci s povolenými funkcemi specifickými pro architekturu, které zajišťují, že se určité instrukce nezmění vzhledem k času datové hodnoty. Toho lze využít k zajištění toho, aby kód napsaný pro běh v konstantním čase nebyl optimalizován funkcemi na úrovni procesoru tak, aby běžel v proměnlivém čase. V současné době WithDataIndependentTiming používá bit PSTATE.DIT na arm64 a nedělá nic na všech ostatních architekturách. Nastavení GODEBUG dataindependenttiming=1 povolí režim DIT pro celý program Go.
Výkon XORBytes se musí zcela nebo vůbec překrývat se vstupem. Dříve bylo chování jinak nedefinováno, zatímco nyní XORBytes propadne panice.
krypto/tls
Server TLS nyní podporuje Encrypted Client Hello (ECH). Tuto funkci lze aktivovat vyplněním pole. Config.EncryptedClientHelloKeys.
Nový postkvantový mechanismus výměny klíčů X25519MLKEM768 nyní podporováno a ve výchozím nastavení povoleno, když Config.CurvePreferences je nulový. Nastavení GODEBUG tlsmlkem=0 vrátí výchozí hodnotu.
Podpora pro experimentální výměnu klíčů X25519Kyber768Draft00 byla odebrána.
Objednávka výměny klíčů je nyní plně řešena balíčkem crypto/tls. Objednávka Config.CurvePreferences je nyní ignorováno a obsah se používá pouze k určení, které výměny klíčů se mají zahrnout, když je pole vyplněno.
Nové pole ClientHelloInfo.Extensions Uvádí seznam identifikátorů rozšíření přijatých ve zprávě Client Hello. To může být užitečné pro klienty TLS s otisky prstů.
krypto/x509
Nastavení GODEBUG x509sha1 byl odstraněn. Certifikace.Ověřte již nepodporuje podpisy založené na SHA-1.
OID nyní implementuje rozhraní kódování.binaryappender и kódování.TextAppender.
Výchozí pole zásad certifikátu bylo změněno z Certificate.PolicyIdentifiers na Certifikát. Zásady. Při analýze certifikátů se vyplní obě pole, ale při vytváření certifikační politiky budou převzata z pole Certificate.Policies namísto Certificate.PolicyIdentifiers. Tuto změnu lze vrátit zpět. Nastavení GODEBUG x509usepolicy=0.
Vytvořit certifikát bude nyní při předávání pole šablony generovat sériové číslo pomocí metody vyhovující RFC 5280 Certifikát.Výrobní číslo nula, místo padání.
Certifikát.Ověřit nyní podporuje ověřování zásad, jak je definováno v RFC 5280 a RFC 9618. Nové pole VerifyOptions.CertificatePolicies lze nastavit na přijatelnou sadu zásad OID. Budou vráceny pouze řetězce certifikátů s platnými grafy zásad Certifikát.Ověřit.
MarshalPKCS8PrivateKey nyní vrací chybu místo načtení neplatného klíče RSA. (MarshalPKCS1PrivateKey nemá žádnou návratovou chybu a její chování při poskytnutí neplatných klíčů zůstává nedefinované.)
ParsePKCS1PrivateKey и ParsePKCS8PrivateKey nyní používat a ověřovat zakódované hodnoty CRT, takže můžete odmítnout neplatné klíče RSA, které byly dříve akceptovány. Používání nastavení GODEBUG x509rsacrt=0 se vrátí k přepočtu hodnot CRT.
debug/elf
Balíček debug/elf Přidává podporu pro zpracování verzí symbolů v dynamických souborech ELF (Executable and Linkable Format). Nová metoda File.DynamicVersions Vrátí seznam dynamických verzí definovaných v souboru ELF. Nová metoda File.DynamicVersionNeeds Vrátí seznam dynamických verzí požadovaných tímto souborem ELF, které jsou definovány v jiných objektech ELF. Konečně nová pole Symbol.HasVersion и Symbol.VersionIndex uveďte verzi symbolu.
kódování
Dvě nová rozhraní TextAppender и BinaryAppender byly zavedeny pro přidání textu nebo binární reprezentace objektu do bajtového řezu. Tato rozhraní poskytují stejnou funkcionalitu jako TextMarshaler и Binární Marshaler, ale místo toho, aby pokaždé přidělili nový řez, připojí data přímo k existujícímu řezu. Tato rozhraní jsou v současné době implementována standardními typy knihoven, které již implementují TextMarshaler a/nebo BinaryMarshaler.
kódování/json
Při sestavování bude pole struktury s novou možností omitzero v tagu pole struktury vynecháno, pokud je jeho hodnota nula. Pokud má typ pole metodu IsZero() bool, bude použita k určení, zda je hodnota nula. V opačném případě bude hodnota nulová hodnotu null pro jeho typ. Značka pole omitzero je čistší a méně náchylná k chybám než omitempty, když je záměrem vynechat hodnoty null. Konkrétně, na rozdíl od omitempty, omitzero vynechává nuly čas.čas hodnot, což je častý zdroj problémů.
Pokud jsou zadány omitempty i omitzero, pole bude vynecháno, pokud je hodnota prázdná nebo nulová (nebo obojí).
UnmarshalTypeError.Field nyní obsahuje vestavěné struktury poskytující podrobnější chybové zprávy.
jít/typy
Všechny datové struktury go/types, které odhalují sekvence párů metod, jako je Len() int a At(int) T, nyní mají také metody, které vracejí iterátory, což umožňuje jednodušší kód, jako je tento:
params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
Na tomto:
for param := range fn.Signature().Params().Variables() { use(param) }
Metody Interface.EmbeddedTypes Interface.ExplicitMethods Rozhraní.Metody MethodSet.Methods Pojmenované.Metody Rozsah.Děti Struktura. Pole Tuple.Proměnné TypeList.Types TypeParamList.TypeParams Union.Terms
hash/*
- hash/adler32: návratová hodnota Nový, nyní také implementuje rozhraní kódování.binaryappender
- hash/crc32: vrácené hodnoty Nový и NovéIEEE, nyní také implementujte rozhraní kódování.binaryappender
- hash/crc64: návratová hodnota Nový, nyní také implementuje rozhraní kódování.binaryappender
- hash/fnv: vrácené hodnoty New32 Nové32a New64 Nové64a New128 и Nové128a, nyní také implementujte rozhraní kódování.binaryappender
- hash/maphash: nové funkce Srovnatelný и Napište srovnatelné dokáže vypočítat hash jakékoli hodnoty, kterou lze porovnat. To vám umožní hašovat cokoli, co lze použít jako klíč slovníku Go.
log/slog
Nový DiscardHandler je obslužná rutina, která není nikdy povolena a vždy zahodí svůj výstup.
Úroveň и LevelVar nyní implementujte rozhraní kódování.TextAppender.
matematika/*
- matematika/velký: Plovák, Int и Krysa nyní implementujte rozhraní kódování.TextAppender.
- matematika/rand: zastaralá volání funkcí nejvyšší úrovně semeno již nemají žádný účinek. Chcete-li obnovit staré chování, můžete použít Nastavení GODEBUG randseednop=0. Více kontextu v nabídka 67273.
- matematika/rand/v2: ChaCha8 и PCG nyní implementujte rozhraní kódování.binaryappender.
síť
Poslouchejte Condig nyní standardně používá MPTCP na systémech, kde je podporován (v současnosti pouze Linux).
IP nyní implementuje rozhraní kódování.TextAppender.
net/http
Omezení se změnilo DOPRAVA na přijaté informační odpovědi 1xx v reakci na požadavek. Dříve by to zastavilo požadavek a vrátilo chybu po obdržení více než 5 odpovědí 1xx. To nyní vrátí chybu pouze v případě, že celková velikost všech odpovědí 1xx překročí nastavení konfigurace Transport.MaxResponseHeaderBytes.
Také, když má požadavek sledovací hák net/http/httptrace.ClientTrace.Got1xxResponse, nyní není limit na celkový počet odpovědí 1xx. Hák Got1xxResponse může vrátit chybu a zastavit požadavek.
DOPRAVA и Server nyní mají pole HTTP2, které umožňuje konfiguraci nastavení protokolu HTTP/2.
Nová pole Server.Protokoly и Transport.Protokoly poskytují jednoduchý způsob, jak nakonfigurovat, které protokoly HTTP server nebo klient používá.
Server a klient lze nakonfigurovat tak, aby podporovali nešifrovaná připojení HTTP/2.
Kdy Server.Protokoly obsahuje UnencrypterHTTP2, bude server přijímat HTTP/2 připojení na nešifrovaných portech. Server může přijímat HTTP/1 i nešifrované HTTP/2 na stejném portu.
Kdy Transport.Protokoly obsahuje UnencryptedHTTP2 a neobsahuje HTTP1, přenos použije pro adresy nešifrovaný HTTP/2 http://. Pokud je přenos nakonfigurován pro použití HTTP/1 i nešifrovaného HTTP/2, bude používat HTTP/1.
Podpora nešifrovaného HTTP/2 používá „HTTP/2 s Forward-Learning“ (RFC 9113, část 3.3). Zastaralé záhlaví „Upgrade: h2c“ není podporováno.
síť/netip
Addr, AddrPort и Předpona nyní implementujte rozhraní kódování.binaryappender и kódování.TextAppender.
net/url
URL nyní také implementuje rozhraní kódování.binaryappender.
OS/uživatel
V systému Windows lze nyní použít ve Windows Nano Server. Implementace byla aktualizována, aby se zabránilo používání funkcí z knihovny NetApi32, která na serveru Nano chybí.
V systému Windows , Vyhledávání и LookupId nyní podporuje následující vestavěné uživatelské servisní účty:
- NOVÁ AUTORITNÍ SYSTÉM
- NT AUTORITNÍ MÍSTNÍ SLUŽBA
- NT AUTORITNÍ SÍŤOVÁ SLUŽBA
V systému Windows byl výrazně zrychlen, když je aktuální uživatel připojen k pomalé doméně, což je běžný případ mnoha firemních uživatelů. Výkon nové implementace je nyní v řádu milisekund ve srovnání s předchozí implementací, jejíž dokončení může trvat několik sekund, dokonce i minut.
V systému Windows nyní vrací uživatele vlastníka procesu, když se aktuální vlákno vydává za jiného uživatele. Dříve to vrátilo chybu.
regexp
Regexp nyní implementuje rozhraní kódování.TextAdapter.
runtime
Funkce GOROOT je nyní zastaralé. V novějších prostředích byste měli preferovat použití systémové cesty k definování binárního souboru "go" a použití go env GOROOT k definici GOROOT.
řetězce
Balíček řetězce přidává několik funkcí pro práci s iterátory:
- Lines Vrátí iterátor přes řádky v řetězci oddělené novým řádkem.
- SplitSeq vrací iterátor přes všechny podřetězce řetězce oddělené oddělovačem.
- SplitAfterSeq vrací iterátor přes podřetězce řetězce, rozdělený po každém výskytu oddělovače.
- PoleSeq vrátí iterátor přes podřetězce řetězce kolem sekvencí bílých znaků, jak je definovánounicode.IsSpace
- FieldsFuncSeq Vrátí iterátor přes podřetězce řetězce kolem sekvencí bodů kódu Unicode, které splňují predikát.
synchronizovat
uskutečnění sync.map byl změněn, aby se zlepšil výkon, zejména pro změny slovníku. Například spor o změnu nesouvislých množin je méně pravděpodobný na velkých slovnících a již nevyžaduje čas na sestavení k dosažení nízkého zatížení slovníku soupeření.
Pokud narazíte na nějaké problémy, nastavte GOEXPERIMENT=nosynchashtriemap během sestavování, abyste se vrátili zpět ke staré implementaci a prosím vyplňte problémový formulář.
Testování
Nové metody T. Souvislosti и B. Souvislosti vrátit kontext, který je po dokončení testu a před provedením funkcí čištění testu zahozen.
Nové metody T.Chdir и B.Chdir lze použít ke změně pracovního adresáře po dobu trvání testu nebo benchmarku.
text/šablona
Šablony nyní podporují range-over-func a range-over-int.
čas
Čas nyní implementuje rozhraní kódování.binaryappender и kódování.TextAppender.
porty
Linux
Tak jak to bylo oznámil Podle poznámek k vydání Go 1.23 vyžaduje Go 1.24 jádro Linuxu verze 3.2 nebo novější.
Darwin
Go 1.24 je poslední vydání, které poběží na macOS 11 Big Sur. Go 1.25 bude vyžadovat macOS 12 Monterey nebo novější.
WebAssembly
Do programů Go byla přidána direktiva kompilátoru go:wasmexport pro export funkcí do hostitele WebAssembly.
V náhledu rozhraní systému WebAssembly 1 (GOOS=wasip1 GOARCH=wasm) podporuje Go 1.24 vytváření programu Go jako reaktor/knihovna zadáním příznaku sestavení -buildmode=c-shared.
Pro funkce go:wasmimport je nyní povoleno více typů jako typy argumentů nebo výsledků. Zejména jsou povoleny bool, string, uintptr a ukazatele na určité typy (viz podrobnosti v dokumentace), spolu s 32bitovými a 64bitovými celočíselnými typy a typy s plovoucí desetinnou čárkou a unsafe.Pointer, které jsou již povoleny. Tyto typy jsou také povoleny jako typy argumentů nebo výsledků pro funkce go:wasmexport.
Soubory podpory pro WebAssembly byly přesunuty do lib/wasm z misc/wasm.
Počáteční paměťová náročnost je výrazně snížena, zejména u malých aplikací WebAssembly.
Windows
32bitový port windows/arm (GOOS=windows GOARCH=arm) byl označen jako poškozený. Podrobnosti v #70705
Zdroj: linux.org.ru
