Den nya versionen av Go-sprÄket, version 1.24, slÀpps sex mÄnader efter Go 1.23. De flesta Àndringarna handlar om implementeringen av verktygskedjan, runtime och bibliotek. Som alltid ger versionen löftet om kompatibilitet Go 1. Utvecklarna av sprÄket förvÀntar sig att nÀstan alla Go-program fortfarande kommer att kompilera och fungera som tidigare.
Ăndringar i sprĂ„ket
Go 1.24 stöder nu helt generiska typalias: ett typalias kan parametriseras som en deklarerad typ. Mer information finns i sprÄkets specifikation. För tillfÀllet kan möjligheten inaktiveras genom att stÀlla in GOEXPERIMENT=noaliastypeparams; dock kommer alternativet aliastypeparams att tas bort i Go 1.25.
Verktyg
Go-kommandot
Go-moduler kan nu spÄra körbara beroenden med hjÀlp av verktygsdirektivet i go.mod. Detta tar bort behovet av den tidigare tillfÀlliga lösningen att lÀgga till verktyg som tomma importer i filen, vanligtvis kallad "tools.go". Go-verktyget kan nu köra dessa verktyg utöver de verktyg som följer med Go. Mer information kan ses i dokumentationen.
Den nya flaggan -tool för go get leder till att verktygsdirektivet lÀggs till i den aktuella modulen för de angivna paketen, utöver att lÀgga till kravsdirektiv.
Ny metamönster tool refererar till alla verktyg i den aktuella modulen. Detta kan anvÀndas för att uppdatera dem alla via go get tool eller för att installera dem i din GOBIN-katalog via go install tool.
Körbara filer som skapats via go run och det nya beteendet hos go tool cachas nu i Go:s byggcache. Detta gör upprepade körningar snabbare genom att öka cache-storleken. #69290.
Kommandona go build och go install accepterar nu flaggan -json, som rapporterar utdata och byggfel som strukturerad JSON utdata till standardutgÄngen. Detaljer om formatet kan ses i go help buildjson.
Dessutom rapporterar go test -json nu utdata och byggfel i JSON, tillsammans med testresultat i JSON. De kan sÀrskiljas med nya action-typer, men om de skapar problem i testsystemets integration kan man ÄtergÄ till textutdata för byggandet via instÀllningen GODEBUG gotestjsonbuildtext=1.
Den nya miljövariabeln GOAUTH ger ett flexibelt sÀtt att autentisera privata modulhÀmtningar. Mer information kan ses i go help goauth.
Go build-kommandot installerar nu versionen av huvudmodulen i den kompilerade binÀren, baserat pÄ taggen och/eller commit:en i versionskontrollsystemet. Suffixet +dirty lÀggs till om det finns osparade Àndringar. Du kan anvÀnda flaggan -buildvcs=false för att hoppa över versionskontrollinformation frÄn binÀren.
Ny konfiguration av GODEBUG toolchaintrace=1 kan nu anvÀndas för att spÄra processen för val av toolchain i go-kommandot.
Cgo
Cgo stöder nya annotationer för C-funktioner för att förbÀttra prestandan under körning. #cgo noescape cFunctionName sÀger till kompileraren att det minne som skickas till C-funktionen cFunctionName inte kan undkomma. #cgo nocallback cFunctionName signalerar kompileraren att C-funktionen cFunctionName inte anropar nÄgra Go-funktioner. Mer information kan ses i cgo-dokumentationen.
Cgo vÀgrar för nÀrvarande att kompilera anrop till C-funktioner som har flera oförenliga deklarationer. Till exempel, om f deklareras som bÄde void f(int) och void f(double), kommer cgo att rapportera ett fel istÀllet för att eventuellt generera en felaktig anropssekvens f(0). Nytt i denna version Àr förbÀttrad upptÀcktsförmÄga av detta felvillkor nÀr oförenliga deklarationer förekommer i olika filer. #67699.
Objdump
Verktyget objdump stöder nu avkodning för 64-bitars LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) och S390X (GOARCH=s390x).
Vet
Den nya analysatorn tests rapporterar vanliga fel i testdeklarationer, fuzzers, benchmarks och exempel i testpaket, sÄsom felaktigt formade namn, ogiltiga signaturer eller exempel som dokumenterar icke-existerande identiteter. NÄgra av dessa fel kan resultera i att tester inte körs.
Den befintliga printf-analysatorn rapporterar nu diagnoser för anrop av formen fmt.Printf(s), dÀr s Àr en icke-konstant formatstrÀng, utan andra argument. SÄdana anrop Àr nÀstan alltid felaktiga, eftersom vÀrdet s kan innehÄlla tecknet %; anvÀnd istÀllet fmt.Print. 60529. Denna kontroll tenderar att göra fynd i befintlig kod och tillÀmpas dÀrför endast nÀr versionssprÄket (som anges av direktivet go-filen go.mod eller kommentarer `//go:build) Àr Ätminstone Go 1.24, för att undvika att skapa avbrott i kontinuerlig integration nÀr du uppdaterar till Go 1.24-toolchain.
Den befintliga buildtag-analysatorn rapporterar nu diagnostik nÀr det finns en felaktig versionsbegrÀnsning för byggande Go i direktivet //go:build. Till exempel, //go:build go1.23.1 hÀnvisar till en punktrelease; istÀllet anvÀnd //go:build go1.23. #64127.
Den befintliga copylock-analysatorn rapporterar nu diagnostik nÀr en variabel som deklarerats i en tredubbel 'for'-loop, som for i := iter(); done(i); i = next(i) { ⊠}, innehÄller sync.Locker, som sync.Mutex. Go 1.22 Àndrade beteendet hos sÄdana loopar till att skapa en ny variabel för varje iteration, kopiera vÀrden frÄn föregÄende iteration; denna kopiering Àr osÀker för lÄs. #66387.
GOCACHEPROG
Det interna binÀra cmd/go och testcache-mekanismen kan nu implementeras av barnprocesser som implementerar JSON-protokollet mellan cmd/go-verktyget och en barnprocess som kallas av miljövariabeln GOCACHEPROG. Tidigare var det GOEXPERIMENT. Protokolldetaljer kan ses i dokumentationen.
Körningstid
Flera prestandaförbÀttringar i körrutinen har minskat CPU-överhead med 2-3 % i genomsnitt bland ett representativt urval av benchmark-tester. Resultaten kan variera beroende pÄ applikationen. Dessa förbÀttringar inkluderar en ny inbyggd implementation av map baserad pÄ Svenska tabeller, effektivare minnesallokering av smÄ objekt och en ny inbyggd runtime-implementation av mutex.
Den nya inbyggda map-implementationen och den nya inbyggda runtime-mutexen kan stÀngas av med instÀllningarna GOEXPERIMENT=noswissmap och GOEXPERIMENT=nospinbitmutex vid bygget respektive.
Kompilatorn
Kompilatorn har redan förbjudit att definiera nya metoder med mottagartyper som har genererats av cgo, men det har varit möjligt att kringgÄ denna begrÀnsning genom att anvÀnda typalias. Go 1.24 rapporterar nu alltid ett fel om mottagaren refererar till en genererad cgo-typ, direkt eller indirekt (genom typalias).
LĂ€nkaren
LÀnkaren genererar nu en GNU byggidentifierare (ELF NT_GNU_BUILD_ID-post) pÄ ELF-plattformar och UUID (Mach-O LC_UUID-laddningskommando) pÄ macOS som standard. Byggidentifieraren eller UUID:en genereras frÄn byggidentifieraren i Go. Detta kan stÀngas av med lÀnkexception flaggan -B none, eller ÄsidosÀttas med flaggan -B 0xNNNN med ett angivet anvÀndardefinierat hexavÀrde.
Rullning
Som anges i versionsnoterna för Go 1.22, Go 1.24 krÀver nu Go 1.22.6 eller senare för att kunna köras. Utvecklarna förvÀntar sig att Go 1.26 kommer att krÀva en punktversion av Go 1.24 eller senare.
Standardbiblioteket
BegrÀnsad katalogÄtkomst till filsystemet
Ny typ os.Root ger möjlighet att utföra filsystemoperationer inom en viss katalog.
Funktionen os.OpenRoot öppnar katalogen och returnerar os.Root. Metoder pÄ os.Root fungerar inom denna katalog och tillÄter inte sökvÀgar att referera till platser utanför katalogen, inklusive de som följer symboliska lÀnkar utanför katalogen. Metoder pÄ os.Root speglar flertalet filsystemoperationer tillgÀngliga i paketet os, inklusive till exempel os.Root.Open, os.Root.Create, os.Root.Mkdir och os.Root.Stat.
Ny benchmark-funktion
Benchmarks kan nu anvÀnda en snabbare och mindre felbenÀgen metod testing.B.Loop för att utföra iterationer av benchmark som for b.Loop() { ⊠} istÀllet för typiska loopstrukturer som involverar b.N som for range b.N. Detta erbjuder tvÄ betydande fördelar:
- Benchmark-funktionen körs exakt en gÄng för varje -count, sÄ kostsamma installations- och stÀdfaser körs endast en gÄng.
- Funktionsanropsparametrar och resultat fortsÀtter att existera, vilket förhindrar kompilatorn frÄn att optimera bort kroppens cykel helt.
FörbÀttrade stÀdare
Ny funktion runtime.AddCleanup Àr en stÀdmekanism som Àr mer flexibel, mer effektiv och mindre benÀgen för fel Àn runtime.SetFinalizer. AddCleanup kopplar en stÀdfunktion till ett objekt, som kommer att köras sÄ snart objektet blir otillgÀngligt. Men till skillnad frÄn SetFinalizer kan flera stÀdningar kopplas till ett objekt, stÀdningar kan kopplas till interna pekare, stÀdningar orsakar vanligtvis inte minneslÀckor nÀr objekt bildar cykler, och stÀdningar fördröjer inte frigörandet av objektet eller objekt som det pekar pÄ. Ny kod bör föredra AddCleanup framför SetFinalizer.
Nytt paket weak
Det nya paketet weak tillhandahÄller svaga pekare.
Svaga pekare Àr en lÄg nivÄ primitiv som tillhandahÄlls för att skapa strukturer som effektivt utnyttjar minnet, sÄsom svaga ordböcker för att mappa vÀrden, normaliseringsordböcker för vad som helst som inte tÀcks av paketet unique, och olika typer av cache. För att stödja dessa anvÀndningsfall ger denna release Àven runtime.AddCleanup och maphash.Comparable.
Ett nytt paket crypto/mlkem
Det nya paketet crypto/mlkem implementerar ML-KEM-768 och ML-KEM-1024.
ML-KEM Àr en post-kvantnyckelutbytesmekanism, tidigare kÀnd som Kyber och specificerad i FIPS 203.
Nya paket crypto/hkdf, crypto/pbkdf2 och crypto/sha3
Det nya paketet crypto/hkdf implementerar en HMAC-baserad nyckelutgĂ„ngsfunktion âExtract-and-Expandâ HKDF, som definieras i RFC 5869.
Det nya paketet crypto/pbkdf2 implementerar en lösenordsbaserad nyckelutgÄngsfunktion PBKDF2, som definieras i RFC 8018.
Det nya paketet crypto/sha3 implementerar hashfunktionen SHA-3 samt SHAKE och cSHAKE funktioner för utvidgad utgÄng, som definieras i FIPS 202.
Alla tre paketen Àr baserade pÄ tidigare existerande paket frÄn golang.org/x/crypto/....
Compliance FIPS 140-3
Denna release inkluderar ett nytt uppsÀttning mekanismer för att sÀkerstÀlla compliance med FIPS 140-3.
Go:s kryptografiska modul bestÄr av ett uppsÀttning interna paket frÄn standardbiblioteket, som transparent anvÀnds för att implementera godkÀnda FIPS 140-3 algoritmer. Applikationer krÀver inga Àndringar för att anvÀnda Go:s kryptografiska modul för godkÀnda algoritmer.
Den nya miljövariabeln GOFIPS140 kan anvÀndas för att vÀlja version av Go:s kryptografiska modul för anvÀndning i bygget. Den nya konfiguration av GODEBUG fips140 kan anvÀndas för att aktivera FIPS 140-3-lÀget under körning.
Go 1.24 inkluderar kryptografiska moduler Go version v1.0.0, som för nÀrvarande testas med ett ackrediterat CMVP-laboratorium.
Ett nytt experimentellt paket testing/synctest
Ett nytt experimentellt paket testing/synctest ger stöd för testning av konkurrentkod.
- Funktionen synctest.Run startar en grupp gorutiner i en isolerad "bubbla". I bubblan fungerar paketets funktioner time pÄ falska klockor.
- Funktioner synctest.Wait vÀntar pÄ att alla gorutiner ska blockeras i den aktuella bubblan.
Detaljer kan ses i paketets dokumentation.
Paketet synctest Àr experimentellt och mÄste aktiveras genom att stÀlla in GOEXPERIMENT=synctest. API:t för paketet kan Àndras i framtida versioner. I #67434 kan man se fler detaljer och ge feedback.
Mindre Àndringar i biblioteket
archive
Implementationer (*Writer.AddFS) i archive/zip och archive/tar skriver nu en katalogrubrik för en tom katalog.
bytes
Paket bytes lÀgger till flera funktioner som arbetar med iteratorer:
- Lines returnerar en iterator över rader som delats med en ny rad i en byte-skiva.
- SplitSeq returnerar en iterator över alla delsekvenser av en byte-slice, uppdelad av en separator.
- SplitAfterSeq returnerar en iterator över delsekvenser av en byte-slice, uppdelad efter varje förekomst av separatorn.
- FieldsSeq returnerar en iterator över delsekvenser av en byte-slice omkring sekvenser av mellanslagstecken, definierat som unicode.IsSpace
- FieldsFuncSeq returnerar en iterator över delsekvenser av en byte-slice omkring sekvenser av Unicode-kodpunkter som uppfyller predikatet.
crypto/aes
VÀrdet som returneras NewChipher implementerar inte lÀngre metoderna NewCTR, NewGCM, NewCBCEncrypter och NewCBCDecrypter. Dessa metoder var icke-dokumenterade och var inte tillgÀngliga pÄ alla arkitekturer. Nu ska vÀrdet Block passeras direkt till de motsvarande funktionerna crypto/cipher. För nÀrvarande kontrollerar crypto/cipher fortfarande dessa metoder pÄ Block-vÀrden, Àven om de inte lÀngre stöds av standardbiblioteket.
crypto/cipher
Ny funktion NewGCMWithRandomNonce ÄtervÀnder AEAD, som implementerar AES-GCM, genererar en slumpmÀssig engÄngsnummen under Seal och lÀgger till den i början av den krypterade texten.
Implementering Stream, som returneras NewCTR nÀr den anvÀnds med crypto/aes Àr nu flera gÄnger snabbare pÄ amd64 och arm64.
NewOFB, NewCFBEncrypter och NewCFBDecrypter Àr nu förklarade som förÄldrade. OFB- och CFB-lÀgena Àr icke-autentiska vilket generellt tillÄter aktiva attacker att manipulera och ÄterstÀlla klartext. Applikationer rekommenderas att anvÀnda AEAD istÀllet. Om ett icke-autentiserat lÀge Stream Àr nödvÀndigt, kan man anvÀnda NewCTR istÀllet.
crypto/ecdsa
PrivateKey.Sign skapar nu en deterministisk signatur enligt RFC 6979, om randomiseringskÀllan Àr nil.
crypto/md5
VÀrdet som returneras md5.New, implementerar nu ocksÄ grÀnssnittet encoding.BinaryAppender.
crypto/rand
Funktionen Read garanterar nu frÄnvaro av misslyckanden. Om Read stöter pÄ ett fel under lÀsning Reader, kommer programmet att avslutas oförÀnderligt. Observera att standard Reader Àr dokumenterad att alltid fungera korrekt, sÄ denna förÀndring bör bara pÄverka de program som överskrider Reader-variabeln. Ett undantag Àr Linux-kÀrnor före version 3.17, dÀr standard Reader fortfarande öppnar /dev/urandom och kan misslyckas.
PÄ Linux 6.11 och senare anvÀnder Reader nu systemanropet getrandom via vDSO. Detta Àr flera gÄnger snabbare, vanligtvis för smÄ lÀsningar.
PÄ OpenBSD anvÀnder Reader nu arc4random_buf(3).
Ny funktion Text kan nu generera kryptografiskt sÀkra slumpmÀssiga textstrÀngar.
crypto/rsa
GenerateKey returnerar nu ett fel om en nyckel pÄ mindre Àn 1024 bitar begÀrs. Alla metoder Sign, Verify, Encrypt och Decrypt returnerar nu ett fel om de anvÀnds med en nyckel som Àr mindre Àn 1024 bitar. SÄdana nycklar Àr osÀkra och bör inte anvÀndas. InstÀllning av GODEBUG rsa1024min=0 ÄterstÀller det gamla beteendet, men Go-utvecklarna rekommenderar att detta endast görs om det Àr absolut nödvÀndigt och endast i tester, till exempel genom att lÀgga till raden //go:debug rsa1024min=0 i testfilen. Ny exempel GenerateKey tillhandahÄller en lÀttanvÀnd standard 2024-bits testnyckel.
Det Àr nu sÀkert och mer effektivt att anropa PrivateKey.Precompute till PrivateKey.Validate. Precompute Àr nu snabbare i nÀrvaro av delvis fyllda PrecomputedValues, till exempel vid extrahering av nyckeln frÄn JSON.
Paketen avvisar nu fler ogiltiga nycklar, Àven nÀr Validate inte anropas, och GenerateKey kan nu returnera nya fel för trasiga slumpkÀllor. FÀlten Primes och Precomputed strukturer PrivateKey anvÀnds och valideras Àven nÀr vissa vÀrden saknas. Det har ocksÄ gjorts Àndringar i crypto/x509 för att analysera och extrahera RSA-nycklar, som beskrivs nedan.
SignPKCS1v15 och VerifyPKCS1v15 stöder nu SHA-512/224, SHA-512/256 och SHA-3.
GenerateKey anvÀnder nu en nÄgot annan metod för att generera den privata exponenten (Carmichael-funktionen istÀllet för Eulers funktion). SÀllsynta applikationer som Äterskapar nycklar uteslutande frÄn primtal kan skapa olika, men kompatibla resultat.
Operationer pÄ offentliga och privata nycklar Àr nu upp till tvÄ gÄnger snabbare pÄ wasm.
crypto/sha*
- crypto/sha1: vÀrdet som returneras av sha1.New implementerar nu ocksÄ grÀnssnittet encoding.BinaryAppender.
- crypto/sha256: vÀrdena som returneras av sha256.New och sha256.New224 implementerar nu ocksÄ grÀnssnittet encoding.BinaryAppender.
- crypto/sha512: vÀrdena som returneras av sha512.New, sha512.New384, sha512.New512_224 och sha512.New512_256, implementerar nu ocksÄ grÀnssnittet encoding.BinaryAppender.
crypto/subtle
Ny funktion WithDataIndependentTiming möjliggör för anvÀndaren att exekvera funktioner med aktiverade arkitekturspecifika funktioner som garanterar oförÀndradhet av vissa instruktioner i förhÄllande till tidens datavÀrden. Detta kan anvÀndas för att sÀkerstÀlla att kod som Àr skapad för att köra pÄ konstant tid inte har optimerats av processorns nivÄfunktioner pÄ ett sÀtt som gör att den körs pÄ variabel tid. För nÀrvarande anvÀnder WithDataIndependentTiming biten PSTATE.DIT pÄ arm64 och gör ingenting pÄ andra arkitekturer. InstÀllning av GODEBUG dataindependenttiming=1 aktiverar DIT-lÀget för hela Go-programmet.
Utdata XORBytes mÄste överlappa helt eller inte alls med ingÄngen. Tidigare beteende var odefinierat i annat fall, medan XORBytes nu kommer att panikera.
crypto/tls
TLS-servern stöder nu Encrypted Client Hello (ECH). Denna funktion kan aktiveras genom att fylla i fÀltet Config.EncryptedClientHelloKeys.
Ny post-kvant nyckelutbytesmekanism X25519MLKEM768 stöds nu och Àr aktiverad som standard nÀr Config.CurvePreferences Àr nil. InstÀllning av GODEBUG tlsmlkem=0 returnerar standardvÀrdet.
Stödet för den experimentella nyckelutbytet X25519Kyber768Draft00 har tagits bort.
Nyckelutbytesordningen hanteras nu helt av paketet crypto/tls. Ordningen Config.CurvePreferences ignoreras nu, och innehÄllet anvÀnds endast för att avgöra vilka nyckelutbyten som ska inkluderas nÀr fÀltet Àr ifyllt.
Det nya fÀltet ClientHelloInfo.Extensions listar identifierarna för de tillÀgg som mottagits i Client Hello-meddelandet. Detta kan vara anvÀndbart för att ta fingeravtryck av TLS-klienter.
crypto/x509
InstÀllning av GODEBUG x509sha1 har tagits bort. Certficicate.Verify stödjer inte lÀngre signaturer baserade pÄ SHA-1.
OID implementerar nu grÀnssnitten encoding.BinaryAppender och encoding.TextAppender.
StandardfÀltet för certifikatpolicyer har Àndrats frÄn Certificate.PolicyIdentifiers till Certificate.Policies. Vid tolkning av certifikat kommer bÄda fÀlten att fyllas i, men vid skapande av certifikatpolicyer kommer de att hÀmtas frÄn fÀltet Certificate.Policies istÀllet för Certificate.PolicyIdentifiers. Denna Àndring kan ÄterstÀllas med instÀllningen GODEBUG x509usepolicies=0.
CreateCertificate kommer nu att generera ett serienummer med hjÀlp av en RFC 5280-kompatibel metod vid överföring av mallen via fÀltet Certificate.SerialNumber nil, istÀllet för att misslyckas.
Certificate.Verify stödjer nu policyvalidering, som definieras i RFC 5280 och RFC 9618. Det nya fÀltet VerifyOptions.CertificatePolicies kan stÀllas in pÄ en acceptabel uppsÀttning policyer OIDs. Endast certifikatkedjor med giltiga policygrafar kommer att ÄterlÀmnas frÄn Certificate.Verify.
MarshalPKCS8PrivateKey returnerar nu ett fel istÀllet för att extrahera en felaktig RSA-nyckel. (MarshalPKCS1PrivateKey har inget felmeddelande och dess beteende med felaktiga nycklar som tillhandahÄlls förblir oförutsÀgbart.)
ParsePKCS1PrivateKey och ParsePKCS8PrivateKey anvÀnder nu och validerar kodade CRT-vÀrden, sÄ de kan avvisa ogiltiga RSA-nycklar som tidigare accepterades. AnvÀndning av GODEBUG-instÀllningen x509rsacrt=0 ÄtergÄr till omberÀkning av CRT-vÀrden.
debug/elf
Paket debug/elf lÀgger till stöd för hantering av versionsinformation i dynamiska ELF-filer (Executable and Linkable Format). Den nya metoden File.DynamicVersions ÄterlÀmnar en lista över dynamiska versioner som definieras i ELF-filen. Den nya metoden File.DynamicVersionNeeds ÄterlÀmnar en lista över dynamiska versioner som krÀvs av denna ELF-fil, som definieras i andra ELF-objekt. Till slut pekar de nya fÀlten Symbol.HasVersion och Symbol.VersionIndex till versionen av symbolen.
encoding
TvÄ nya grÀnssnitt TextAppender och BinaryAppender har införts för att lÀgga till textuell eller binÀr representation av objektet till en byte-slice. Dessa grÀnssnitt erbjuder samma funktionalitet som TextMarshaler och BinaryMarshaler, men istÀllet för att allokera en ny slice varje gÄng, lÀgger de data direkt i den existerande slicen. Dessa grÀnssnitt Àr nu implementerade av typerna i standardbiblioteket som redan implementerar TextMarshaler och/eller BinaryMarshaler.
encoding/json
Vid serialisering kommer fÀltet i strukturen med den nya omitzero-alternativet i fÀltets tagg att uteslutas om dess vÀrde Àr noll. Om typens fÀlt har metoden IsZero() bool, kommer den att anvÀndas för att avgöra om vÀrdet Àr noll. Annars kommer vÀrdet att vara noll om det Àr ett nollvÀrde för dess typ. FÀlt-taggen omitzero Àr renare och mindre benÀgen för misstag Àn omitempty, nÀr avsikten Àr att utesluta nollvÀrden. SÀrskilt jÀmfört med omitempty, utesluter omitzero noll time.Time vÀrden, vilket Àr en vanlig kÀlla till problem.
Om bÄde omitempty och omitzero anges kommer fÀltet att uteslutas om vÀrdet Àr tomt eller noll (eller bÄda samtidigt).
UnmarshalTypeError.Field innehÄller nu inbyggda strukturer för att ge mer detaljerade felmeddelanden.
go/types
Alla datastrukturer go/types som avslöjar sekvenser av metodpar, som Len() int och At(int) T, har nu ocksÄ metoder som returnerar iteratorer, vilket förenklar kod likt detta:
params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
För detta:
for param := range fn.Signature().Params().Variables() { use(param) }
Metoder: 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Àrdet som returneras av Ny, implementerar nu ocksÄ grÀnssnittet encoding.BinaryAppender
- hash/crc32: vÀrdena som returneras av Ny och NewIEEE, implementerar nu ocksÄ grÀnssnittet encoding.BinaryAppender
- hash/crc64: vÀrdet som returneras av Ny, implementerar nu ocksÄ grÀnssnittet encoding.BinaryAppender
- hash/fnv: vÀrdena som returneras av New32 New32a New64 New64a New128 och New128a, implementerar nu ocksÄ grÀnssnittet encoding.BinaryAppender
- hash/maphash: nya funktioner Comparable och WriteComparable kan berÀkna hash av vilket vÀrde som helst som gÄr att jÀmföra. Detta gör det möjligt att hashera vad som helst som kan anvÀndas som nyckel i en Go-dictionary.
log/slog
Ny DiscardHandler Àr en hanterare som aldrig Àr aktiverad och alltid kastar bort sin utdata.
NivÄ och LevelVar implementerar nu ett grÀnssnitt encoding.TextAppender.
math/*
- math/big: Float, Int och Rat implementerar nu ett grÀnssnitt encoding.TextAppender.
- math/rand: anrop av förÄldrad hög-nivÄfunktion Seed har inte lÀngre nÄgon effekt. För att ÄterstÀlla det gamla beteendet kan man anvÀnda instÀllningen GODEBUG randseednop=0. Mer kontext i förslag 67273.
- math/rand/v2: ChaCha8 och PCG implementerar nu ett grÀnssnitt encoding.BinaryAppender.
net
ListenCondig anvÀnder nu MPTCP som standard pÄ system dÀr det stöds (just nu bara Linux).
IP implementerar nu ett grÀnssnitt encoding.TextAppender.
net/http
Ăndrat begrĂ€nsning Transport pĂ„ mottagna informationssvar 1xx som svar pĂ„ en begĂ€ran. Tidigare stoppade detta begĂ€ran och returnerade ett fel efter att ha mottagit mer Ă€n 5 svar 1xx. Nu returneras ett fel endast om den totala storleken av alla svar 1xx överskrider konfigurationsinstĂ€llningen Transport.MaxResponseHeaderBytes.
Dessutom, nÀr en begÀran har en hook för spÄrning net/http/httptrace.ClientTrace.Got1xxResponse, finns det nu ingen begrÀnsning pÄ det totala antalet svar 1xx. Hook Got1xxResponse kan returnera ett fel för att stoppa begÀran.
Transport och Server har nu ett HTTP2-fÀlt som tillÄter konfigurering av HTTP/2-protokollinstÀllningar.
Nya fÀlt Server.Protocols och Transport.Protocols ger ett enkelt sÀtt att konfigurera vilka protokoll en HTTP-server eller klient anvÀnder.
Server och klient kan konfigureras för att stödja okrypterade HTTP/2-anslutningar.
NÀr Server.Protocols innehÄller UnencrypterHTTP2, servern kommer att ta emot HTTP/2-anslutningar pÄ okrypterade portar. Servern kan ta emot bÄde HTTP/1 och okrypterat HTTP/2 pÄ samma port.
NÀr Transport.Protocols innehÄller UnencryptedHTTP2 och gör inte HTTP1, transportet kommer att anvÀnda okrypterat HTTP/2 för adresser http://. Om transporten Àr konfigurerad att anvÀnda bÄde HTTP/1 och okrypterad HTTP/2, kommer den att anvÀnda HTTP/1.
Stödet för okrypterad HTTP/2 anvÀnder "HTTP/2 med förhandskunskap" (RFC 9113, avsnitt 3.3). Den förÄldrade rubriken "Upgrade: h2c" stöds inte.
net/netip
Addr, AddrPort och Prefix implementerar nu grÀnssnitt encoding.BinaryAppender och encoding.TextAppender.
net/url
URL implementerar nu ocksÄ grÀnssnittet encoding.BinaryAppender.
os/user
I Windows Aktuell kan nu anvÀndas i Windows Nano Server. Implementeringen har uppdaterats för att undvika anvÀndning av funktioner frÄn biblioteket NetApi32, som saknas i Nano Server.
I Windows Aktuell, Lookup och LookupId stödjer nu följande inbyggda anvÀndartjÀnstkonton:
- NT AUTHORITYSYSTEM
- NT AUTHORITYLOCAL SERVICE
- NT AUTHORITYNETWORK SERVICE
I Windows Aktuell har avsevÀrt accelererats nÀr den aktuella anvÀndaren Àr ansluten till en lÄngsam domÀn, vilket Àr vanligt bland mÄnga företagsanvÀndare. Den nya prestandan i implementeringen ligger nu i millisekunder, jÀmfört med den tidigare implementeringen som kunde ta flera sekunder, till och med minuter, att slutföra.
I Windows Aktuell returnerar nu Àgaren av processen nÀr den aktuella trÄden framhÀver sig sjÀlv som en annan anvÀndare. Tidigare returnerade detta ett fel.
regexp
Regexp implementerar nu ett grÀnssnitt encoding.TextAdapter.
runtime
Funktionen GOROOT har nu deklarerats som förÄldrad. I ny kod bör systemvÀgen föredras för att definiera binÀrfilen "go", och anvÀnd "go env GOROOT" för att definiera GOROOT.
strings
Paket strings lÀgger till flera funktioner för att arbeta med iteratorer:
- Lines returnerar en iterator av rader delade av ny rad i strÀngen.
- SplitSeq returnerar en iterator av alla delstrÀngar i strÀngen, delade av separeraren.
- SplitAfterSeq returnerar en iterator av delstrÀngar i strÀngen, delade efter varje förekomst av separeraren.
- FieldsSeq returnerar en iterator av delstrÀngar i strÀngen runt sekvenser av mellanslag, som definierat.unicode.IsSpace
- FieldsFuncSeq returnerar en iterator av delstrÀngar i strÀngen kring sekvenser av unicode-kodpunkter som uppfyller predikatet.
sync
Implementering sync.Map har förÀndrats för att förbÀttra prestandan, sÀrskilt för Àndringar av ordboken. Till exempel Àr det mindre troligt med konkurrens om förÀndringar av icke-överlappande uppsÀttningar i stora ordböcker, och ingen uppbyggnadstid krÀvs för att uppnÄ lÄg konkurrens belastning pÄ ordboken.
Om du stöter pÄ nÄgra problem, stÀll in GOEXPERIMENT=nosynchashtriemap under bygget för att ÄtergÄ till den gamla implementationen, och var god fyll i problemformulÀret.
testing
Nya metoder T.Context och B.Context Äterför kontexten som avbryts efter att testet Àr klart och före utförandet av testets stÀdfunktioner.
Nya metoder T.Chdir och B.Chdir kan anvÀndas för att Àndra arbetskatalogen under testets eller benchmarkens varaktighet.
text/template
Mallar stöder nu range-over-func och range-over-int.
time
Tid implementerar nu grÀnssnitten encoding.BinaryAppender och encoding.TextAppender.
Portar
Linux
Som det var meddelats i utgivningsanteckningarna för Go 1.23, krÀver Go 1.24 Linux kÀrna version 3.2 eller senare.
Darwin
Go 1.24 Àr den senaste utgÄvan som kommer att fungera pÄ macOS 11 Big Sur. Go 1.25 kommer att krÀva macOS 12 Monterey eller senare.
WebAssembly
Kommandot för kompilatorn go:wasmexport har lagts till i Go-program för att exportera funktioner till WebAssembly-vÀrden.
I WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) stöder Go 1.24 bygget av Go-program som reactor/library genom att ange byggflagg -buildmode=c-shared.
Fler typer Àr nu tillÄtna som argument- eller resultattyper för funktioner go:wasmimport. Speciellt Àr bool, string, uintptr och pekare till vissa typer tillÄtna (detaljer kan ses i dokumentationen), tillsammans med 32-bitars och 64-bitars heltalstyper och flyttal, samt unsafe.Pointer som redan Àr tillÄtna. Dessa typer Àr ocksÄ tillÄtna som argument- eller resultattyper för funktioner go:wasmexport.
Stödfiler för WebAssembly har flyttats till lib/wasm frÄn misc/wasm.
Den ursprungliga minnesstorleken har minskats avsevÀrt, sÀrskilt för smÄ WebAssembly-appar.
Windows
32-bitars port windows/arm (GOOS=windows GOARCH=arm) har markerats som trasig. Detaljer i #70705
KĂ€lla: linux.org.ru
