Go 1.24

Go 1.24

De nieuwste uitgave van de Go-taal, versie 1.24, verschijnt zes maanden na Go 1.23. De meeste wijzigingen betreffen de implementatie van de toolchain, runtime en bibliotheken. Zoals altijd biedt de release de belofte van compatibiliteit Go 1. De ontwikkelaars van de taal verwachten dat bijna alle Go-programma's zoals voorheen blijven compileren en functioneren.

Wijzigingen in de taal

Go 1.24 ondersteunt nu volledig generic type aliases: een type-alias kan worden geparametriseerd als een gedeclareerd type. Meer details in de taal specificatie. Voorlopig kan de mogelijkheid worden uitgeschakeld door GOEXPERIMENT=noaliastypeparams in te stellen; echter, de optie aliastypeparams zal worden verwijderd in Go 1.25.

Hulpmiddelen

De go-commando

Go-modules kunnen nu uitvoerende afhankelijkheden volgen met behulp van de tooldirectieve in go.mod. Dit elimineert de noodzaak voor de eerdere workaround om tools als lege importen in het bestand toe te voegen, meestal genaamd “tools.go”. De go tool kan nu deze tools uitvoeren naast de tools die met Go worden meegeleverd. Meer informatie is te vinden in de documentatie.

De nieuwe vlag -tool voor go get leidt tot het toevoegen van een tooldirectieve in het huidige module voor de gespecificeerde pakketten, naast het toevoegen van vereiste directieven.

Nieuwe meta-patroon tool verwijst naar alle tools in het huidige module. Dit kan worden gebruikt om ze allemaal te updaten via go get tool of om ze in je GOBIN-directory te installeren via go install tool.

Uitvoerbare bestanden gemaakt met go run en het nieuwe gedrag van go tool worden nu gecached in de Go-bouwcache. Dit maakt herhaaldelijke uitvoeringen mogelijk door de vergrote cache. #69290.

De go build- en go install-commando's accepteren nu de vlag -json, die de uitvoer en fouten van de bouw geeft als gestructureerde JSON-uitvoer op de standaarduitvoer. De details van het formaat zijn te vinden in go help buildjson.

Bovendien, go test -json geeft nu de uitvoer en fouten van de bouw in JSON, vermengd met de JSON van de testresultaten. Ze kunnen worden onderscheiden door nieuwe types Actie, maar als ze problemen veroorzaken in het testsysteem, kan men teruggaan naar de tekstuele bouwuitvoer via de GODEBUG-instelling gotestjsonbuildtext=1.

De nieuwe omgevingsvariabele GOAUTH biedt een flexibele manier om autorisaties voor privé-module-invullingen te beheren. Zie de details in go help goauth.

De go build-commando installeert nu de versie van het hoofdmodule in de gecompileerde binaire, gebaseerd op de tag en/of commit van het versiebeheersysteem. De suffix +dirty wordt toegevoegd als er ongeregistreerde wijzigingen aanwezig zijn. Gebruik de vlag -buildvcs=false om versiebeheerinformatie uit de binaire uit te sluiten.

Nieuwe GODEBUG-instellingen toolchaintrace=1 kan nu gebruikt worden voor het volgen van het proces van het kiezen van een toolchain in het go-team.

Cgo

Cgo ondersteunt nieuwe annotaties voor C-functies voor het verbeteren van de runtime-prestaties. #cgo noescape cFunctionName zegt tegen de compiler dat het geheugen dat aan C-functie cFunctionName is doorgegeven niet kan ontsnappen. #cgo nocallback cFunctionName laat de compiler weten dat C-functie cFunctionName geen Go-functies terugroept. Meer informatie is te vinden in de cgo-documentatie.

Cgo weigert momenteel om C-functies te compileren die meerdere incompatibele declaraties hebben. Bijvoorbeeld, als f is gedeclareerd als zowel void f(int) als void f(double), zal cgo een foutmelding geven in plaats van een onjuiste aanroepvolgorde van f(0) te genereren. Een nieuwe functie in deze release is verbeterde detectie van deze fout, wanneer incompatibele declaraties in verschillende bestanden voorkomen. #67699.

Objdump

De objdump-tool ondersteunt nu disassemblage voor 64-bits LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) en S390X (GOARCH=s390x).

Vet

De nieuwe tests-analyzer meldt veelvoorkomende fouten in testdeclaraties, fuzzers, benchmarks en voorbeelden in testpakketten, zoals onjuist gevormde namen, onjuiste handtekeningen of voorbeelden die niet-bestaande identificeerders documenteren. Sommige van deze fouten kunnen leiden tot het niet uitvoeren van tests.

De bestaande printf-analyzer meldt nu diagnostiek voor aanroepen van de vorm fmt.Printf(s), waarbij s een niet-constante formatteerstring is zonder andere argumenten. Dergelijke aanroepen zijn vrijwel altijd een fout, omdat de waarde van s het % teken kan bevatten; gebruik in plaats daarvan fmt.Print. 60529. Deze controle heeft de neiging om bevindingen in bestaande code te maken, en daarom wordt deze alleen toegepast wanneer de taalversie (zoals gespecificeerd door de go-directive in het go.mod-bestand of door de comments `//go:build) minimaal Go 1.24 is, om te voorkomen dat langdurige integratieschema's falen bij de upgrade naar de Go 1.24 toolchain.

De bestaande buildtag-analyseert meldt nu diagnosen wanneer er iets mis is. beperkingen van de oudere versie. Ga naar de //go:build-directive. Bijvoorbeeld, //go:build go1.23.1 verwijst naar een patchrelease; in plaats daarvan gebruik je //go:build go1.23. #64127.

De bestaande copylock-analyseert meldt nu diagnosen wanneer een variabele, gedeclareerd in een driedubbele 'for'-lus, zoals for i := iter(); done(i); i = next(i) { … }, sync.Locker bevat, zoals sync.Mutex. Go 1.22 veranderde het gedrag van dergelijke lussen door voor elke iteratie een nieuwe variabele te maken, waarbij waarden van de vorige iteratie worden gekopieerd; deze kopie is niet veilig voor locks. #66387.

GOCACHEPROG

De interne binaire cmd/go en het testcachemechanisme kunnen nu worden geïmplementeerd door subprocessen die een JSON-protocol implementeren tussen het cmd/go-hulpmiddel en de subprocess, genoemd met de omgevingsvariabele GOCACHEPROG. Eerder was dit voor GOEXPERIMENT. De details van het protocol zijn zichtbaar in de documentatie.

Tijd van uitvoering.

Verschillende prestatieverbeteringen in runtime hebben de CPU-overhead met 2-3% gemiddeld verminderd in een representatieve set benchmarks. De resultaten kunnen variëren afhankelijk van de toepassing. Deze verbeteringen omvatten een nieuwe ingebouwde mapimplementatie gebaseerd op Zweedse Tafels, efficiënter geheugenbeheer voor kleine objecten, en een nieuwe interne runtime-implementatie van mutexes.

De nieuwe ingebouwde mapimplementatie en de nieuwe interne runtime-mutex kunnen worden uitgeschakeld met de instellingen GOEXPERIMENT=noswissmap en GOEXPERIMENT=nospinbitmutex tijdens de bouw, respectievelijk.

Compilator

De compiler verbiedt al het definiëren van nieuwe methoden met ontvangerstypes die door cgo zijn gegenereerd, maar het was mogelijk om deze beperking te omzeilen via type-aliasing. Go 1.24 meldt nu altijd een fout als de ontvanger verwijst naar een gegenereerd cgo-type, direct of indirect (via een type-alias).

Linker

De linker genereert nu standaard een GNU-buildidentificatie (ELF NT_GNU_BUILD_ID-record) op ELF-platforms en een UUID (Mach-O LC_UUID-loadcommando) op macOS. De buildidentificatie of UUID wordt afgeleid van de Go-buildidentificatie. Dit kan worden uitgeschakeld met de linkerflag -B none, of worden overschreven met de linkerflag -B 0xNNNN met een door de gebruiker opgegeven hexadecimale waarde.

Ontwikkeling

Zoals aangegeven in de releaseopmerkingen van Go 1.22, Go 1.24 vereist nu Go 1.22.6 of later voor mounting. Ontwikkelaars verwachten dat Go 1.26 een patchrelease van Go 1.24 of later zal vereisen.

StANDAARDBIBLIOTHEEK

Beperkte directory toegang tot het bestandssysteem

Nieuw type os.Root biedt de mogelijkheid om bestandsoperaties uit te voeren binnen een specifieke directory.

Functie os.OpenRoot opent een directory en retourneert os.Root. Methoden in os.Root werken binnen deze directory en voorkomen dat paden verwijzen naar locaties buiten de directory, inclusief die welke via symbolische links buiten de directory gaan. Methodes op os.Root weerspiegelen de meeste bestandsoperaties die beschikbaar zijn in het os-pakket, inclusief bijvoorbeeld os.Root.Open, os.Root.Create, os.Root.Mkdir en os.Root.Stat.

Nieuwe benchmarkfunctie

Benchmarks kunnen nu een snellere en minder foutgevoelige methode gebruiken testing.B.Loop voor iteraties van benchmarks zoals for b.Loop() { … } in plaats van typische cyclische structuren met b.N zoals for range b.N. Dit biedt twee belangrijke voordelen:

  • De benchmarkfunctie wordt precies één keer uitgevoerd per -count, waardoor dure setup- en cleanup-stappen slechts één keer worden uitgevoerd.
  • De parameters voor het aanroepen van de functie en de resultaten blijven bestaan, zodat de compiler de volledige optimalisatie van de lusinhoud voorkomt.

Verbeterde finalizers

Nieuwe functie runtime.AddCleanup is een afsluitmechanisme dat flexibeler, efficiënter en minder foutgevoelig is dan runtime.SetFinalizer. AddCleanup koppelt een opruimfunctie aan een object, dat wordt uitgevoerd zodra het object niet meer toegankelijk is. In tegenstelling tot SetFinalizer kunnen echter meerdere opruimfuncties aan één object worden gekoppeld, opruimfuncties kunnen worden gekoppeld aan interne pointers, en opruimfuncties veroorzaken doorgaans geen lekken wanneer objecten een cyclus vormen, en opruimfuncties stellen het vrijgeven van het object of de objecten waarnaar het verwijst niet uit. Nieuwe code moet de voorkeur geven aan AddCleanup boven SetFinalizer.

Nieuw pakket weak

Nieuw pakket weak biedt zwakke pointers.

Zwakke pointers zijn een laag-niveau primitief dat is voorzien voor het creëren van structuren die effectief geheugen gebruiken, zoals zwakke woordenboeken voor het koppelen van waarden, canonisatie woordenboeken voor alles dat niet wordt gedekt door het pakket unique, en verschillende soorten caches. Ter ondersteuning van deze use-cases biedt deze release ook runtime.AddCleanup en maphash.Comparable.

Nieuw pakket crypto/mlkem

Nieuw pakket crypto/mlkem implementaties van ML-KEM-768 en ML-KEM-1024.

ML-KEM is een post-kwantum sleuteldelingsmechanisme, voorheen bekend als Kyber en gespecificeerd in FIPS 203.

Nieuwe pakketten crypto/hkdf, crypto/pbkdf2 en crypto/sha3

Nieuw pakket crypto/hkdf implmenteert de op HMAC gebaseerde sleuteluitvoerfunctie “Extract-and-Expand” HKDF, zoals gedefinieerd in RFC 5869.

Nieuw pakket crypto/pbkdf2 implmenteert de op wachtwoord gebaseerde sleuteluitvoerfunctie PBKDF2, zoals gedefinieerd in RFC 8018.

Nieuw pakket crypto/sha3 implmenteert de hashfunctie SHA-3 en SHAKE en cSHAKE functies voor uitbreidbare uitvoer, zoals gedefinieerd in FIPS 202.

Alle drie de pakketten zijn gebaseerd op eerder bestaande pakketten van golang.org/x/crypto/....

FIPS 140-3 Compliance

Deze release omvat een nieuwe set mechanismen voor het waarborgen van FIPS 140-3 compliance.

De cryptografische module van Go is een set interne pakketten van de standaardbibliotheek die transparant worden gebruikt voor de implementatie van goedgekeurde FIPS 140-3 algoritmen. Toepassingen vereisen geen wijzigingen om de cryptografische module van Go voor goedgekeurde algoritmen te gebruiken.

De nieuwe omgevingsvariabele GOFIPS140 kan worden gebruikt om de versie van de cryptografische module van Go voor gebruik in de build te kiezen. Nieuwe GODEBUG-instellingen fips140 kan worden gebruikt om de FIPS 140-3 modus tijdens runtime in te schakelen.

Go 1.24 omvat de cryptografische module van Go versie v1.0.0, die momenteel wordt getest met een geaccrediteerde CMVP-laboratorium.

Nieuw experimenteel pakket testing/synctest

Nieuw experimenteel pakket testing/synctest biedt ondersteuning voor het testen van concurrerende code.

Details zijn te vinden in de documentatie van het pakket.

Het synctest-pakket is experimenteel en kan worden ingeschakeld door GOEXPERIMENT=synctest in te stellen. De API van het pakket kan in toekomstige releases veranderen. In #67434 kun je meer details vinden en feedback geven.

Minimale wijzigingen in de bibliotheek

archive

Implementaties (*Writer.AddFS) in archive/zip en archive/tar schrijven nu de directoryheader voor een lege directory.

bytes

Package bytes voegt enkele functies toe die werken met iterators:

  • Lines geeft een iterator terug over de regels gescheiden door nieuwe lijnen in een byte-slice.
  • SplitSeq geeft een iterator terug over alle sub-slices van de byte-slice, gescheiden door de scheidingstekens.
  • SplitAfterSeq geeft een iterator terug over de sub-slices van de byte-slice, gescheiden na elke optreden van de scheidingsteken.
  • FieldsSeq geeft een iterator terug over de sub-slices van de byte-slice rond reeksen spaties, zoals gedefinieerd door unicode.IsSpace
  • FieldsFuncSeq geeft een iterator terug over de sub-slices van de byte-slice rond reeksen Unicode-codepunten die voldoen aan de predicaat.

crypto/aes

Waarde die wordt teruggegeven NewChipher implementeren geen methoden meer voor NewCTR, NewGCM, NewCBCEncrypter en NewCBCDecrypter. Deze methoden waren niet gedocumenteerd en waren niet beschikbaar op alle architecturen. Nu moet de waarde Block direct worden doorgegeven aan de bijbehorende functies crypto/cipher. Op dit moment controleert crypto/cipher nog steeds deze methoden op de waarden Block, ook al worden ze niet langer ondersteund door de standaardbibliotheek.

crypto/cipher

Nieuwe functie NewGCMWithRandomNonce geeft hij AEAD, die AES-GCM implementeert door een willekeurige eenmalige nonce te genereren tijdens Seal en deze aan het begin van de versleutelde tekst toe te voegen.

Implementatie Stream, wordt teruggegeven NewCTR bij gebruik met crypto/aes nu meerdere keren sneller op amd64 en arm64.

NewOFB, NewCFBEncrypter en NewCFBDecrypter zijn nu verouderd. De OFB- en CFB-modi zijn niet-geauthenticeerd, waardoor actieve aanvallen het mogelijk maken om te manipuleren en de platte tekst te herstellen. Toepassingen wordt aangeraden AEAD in plaats daarvan te gebruiken. Als een niet-geauthenticeerde modus Stream vereist is, kan NewCTR in plaats daarvan worden gebruikt.

crypto/ecdsa

PrivateKey.Sign creëert nu een deterministische handtekening volgens RFC 6979, als de bron van willekeurigheid nil is.

crypto/md5

Waarde die wordt teruggegeven md5.New, implementeert nu ook het interface encoding.BinaryAppender.

crypto/rand

Functie Lezen garandeert nu dat er geen mislukkingen zijn. Als Read een fout tegenkomt tijdens het lezen Reader, wordt het programma zonder waarschuwing beëindigd. Let op dat de standaard Reader altijd gedocumenteerd is om succesvol te werken, dus deze verandering zou alleen invloed moeten hebben op die programma's die de Reader-variabele overschrijven. Een uitzondering vormen Linux-kernels tot versie 3.17, waar de standaard Reader nog steeds /dev/urandom opent en kan falen.

Op Linux 6.11 en later gebruikt Reader nu de systeemaanroep getrandom via vDSO. Dit is meerdere malen sneller, meestal voor kleine leesbewerkingen.

Op OpenBSD gebruikt Reader nu arc4random_buf(3).

Nieuwe functie Tekst kan nu cryptografisch veilige willekeurige tekststrings genereren.

crypto/rsa

GenerateKey geeft nu een foutmelding terug als er een sleutel van minder dan 1024 bits wordt aangevraagd. Alle methoden Sign, Verify, Encrypt en Decrypt geven nu een foutmelding terug als ze worden gebruikt met een sleutel van minder dan 1024 bits. Dergelijke sleutels zijn onveilig en mogen niet worden gebruikt. GODEBUG-instellingen rsa1024min=0 herstelt het oude gedrag, maar de Go-ontwikkelaars raden aan dit alleen te doen indien nodig en alleen in tests, bijvoorbeeld door de regel //go:debug rsa1024min=0 aan het testbestand toe te voegen. De nieuwe bijvoorbeeld GenerateKey biedt een eenvoudig te gebruiken standaard test sleutel van 2024 bits.

Het is nu veilig en efficiënter om PrivateKey.Precompute tot PrivateKey.Validate. Precompute is nu sneller bij aanwezigheid van gedeeltelijk ingevulde PrecomputedValues, bijvoorbeeld bij het extraheren van een sleutel uit JSON.

Het pakket wijst nu meer onjuiste sleutels af, zelfs wanneer Validate niet wordt aangeroepen, en GenerateKey kan nu nieuwe fouten teruggeven voor defecte willekeurige bronnen. Velden Primes en Precomputed struct seccomp_data PrivateKey worden nu gebruikt en gevalideerd, zelfs wanneer sommige waarden ontbreken. Er zijn ook wijzigingen aangebracht in crypto/x509 voor het parseren en extraheren van RSA-sleutels, die hieronder worden beschreven.

SignPKCS1v15 en VerifyPKCS1v15 ondersteunen nu SHA-512/224, SHA-512/256 en SHA-3.

GenerateKey gebruikt nu een iets andere methode voor het genereren van de privé-exponent (de Carmichael-functie in plaats van de Euler-functie). Zeldzame toepassingen die sleutels alleen uit priemgetallen recreëren, kunnen verschillende, maar compatibele resultaten genereren.

Bewerkingen met publieke en private sleutels zijn nu tot twee keer sneller op wasm.

crypto/sha*

crypto/subtle

Nieuwe functie WithDataIndependentTiming maakt het de gebruiker mogelijk om een functie uit te voeren met ingeschakelde, architectuur-specifieke functies die de onveranderlijkheid van bepaalde instructies met betrekking tot de tijd van gegevenswaarde waarborgen. Dit kan worden gebruikt om ervoor te zorgen dat de code die is gemaakt om te werken bij constante tijd niet is geoptimaliseerd door functies op het niveau van de processor op een manier dat het in variabele tijd werkt. Momenteel gebruikt WithDataIndependentTiming de PSTATE.DIT-bit op arm64 en doet verder niets op andere architecturen. GODEBUG-instellingen dataindependenttiming=1 schakelt de DIT-modus in voor het hele Go-programma.

Uitslag XORBytes moet volledig of helemaal niet met de invoer overlappen. Het vorige gedrag was onbepaald in andere gevallen, terwijl XORBytes nu een panic zal veroorzaken.

crypto/tls

De TLS-server ondersteunt nu Encrypted Client Hello (ECH). Deze functie kan worden ingeschakeld door het veld Config.EncryptedClientHelloKeys.

Nieuwe post-quantum key exchange mechanisme X25519MLKEM768 wordt nu ondersteund en standaard ingeschakeld wanneer Config.CurvePreferences nil is. GODEBUG-instellingen tlsmlkem=0 geeft de standaard terug.

Ondersteuning voor de experimentele key exchange X25519Kyber768Draft00 is verwijderd.

De volgorde van het sleuteluitwisselingsproces wordt nu volledig afgehandeld in het crypto/tls-pakket. De volgorde Config.CurvePreferences wordt nu genegeerd, en de inhoud wordt alleen gebruikt om te bepalen welke sleuteluitwisselingen in te schakelen wanneer het veld is ingevuld.

Nieuw veld ClientHelloInfo.Extensions lijst de extensie-ID's op die zijn ontvangen in het Client Hello-bericht. Dit kan nuttig zijn om TLS-klanten te fingerprinten.

crypto/x509

GODEBUG-instellingen x509sha1 is verwijderd. Certficicate.Verify ondersteunt geen handtekeningen op basis van SHA-1 meer.

OID implementeren nu de interfaces encoding.BinaryAppender en encoding.TextAppender.

Het standaardveld voor certificaatbeleid is gewijzigd van Certificate.PolicyIdentifiers en een werkende opdracht krijgen. Certificate.Policies. Bij het parseren van certificaten zullen beide velden worden ingevuld, maar bij het maken van certificaatbeleidsregels zullen deze worden genomen uit het veld Certificate.Policies in plaats van Certificate.PolicyIdentifiers. Deze wijziging kan worden teruggebracht met de GODEBUG-instelling x509usepolicies=0.

CreateCertificate zal nu een serienummer genereren met behulp van een RFC 5280-compatibele methode bij het doorgeven van de sjabloon via het veld Certificate.SerialNumber nil, in plaats van te falen.

Certificate.Verify ondersteunt nu beleidsvalidatie zoals gedefinieerd in RFC 5280 en RFC 9618. Het nieuwe veld VerifyOptions.CertificatePolicies kan worden ingesteld op een aanvaardbare set van beleid OIDs. Alleen ketens van certificaten met geldige beleidsgrafieken worden geretourneerd vanuit Certificate.Verify.

MarshalPKCS8PrivateKey geeft nu een fout terug in plaats van een onjuiste RSA-sleutel te extraheren. (MarshalPKCS1PrivateKey heeft geen foutterugkeer en het gedrag bij het verstrekken van onjuiste sleutels blijft onbepaald.)

ParsePKCS1PrivateKey en ParsePKCS8PrivateKey gebruiken nu en valideren gecodeerde CRT-waarden, zodat ze onjuiste RSA-sleutels kunnen afwijzen die eerder zijn geaccepteerd. Het gebruik van GODEBUG-instellingen x509rsacrt=0 keert terug naar het herberekenen van CRT-waarden.

debug/elf

Package debug/elf voegt ondersteuning toe voor het verwerken van symbolenversies in dynamische ELF-bestanden (Executable and Linkable Format). Nieuwe methode File.DynamicVersions geeft een lijst van dynamische versies terug die in het ELF-bestand zijn gedefinieerd. Nieuwe methode File.DynamicVersionNeeds geeft een lijst van dynamische versies terug die door dit ELF-bestand worden vereist en die zijn gedefinieerd in andere ELF-objecten. Tot slot geven nieuwe velden Symbol.HasVersion en Symbol.VersionIndex de versie van het symbool aan.

encoding

Twee nieuwe interfaces TextAppender en BinaryAppender zijn geïntroduceerd om een tekstuele of binaire weergave van een object aan een byte-slice toe te voegen. Deze interfaces bieden dezelfde functionaliteit als TextMarshaler en BinaryMarshaler, maar in plaats van elke keer een nieuwe slice te alloceren, voegen ze gegevens rechtstreeks toe aan de bestaande slice. Deze interfaces worden nu geïmplementeerd door typen van de standaardbibliotheek die al TextMarshaler en/of BinaryMarshaler implementeren.

encoding/json

Bij het bouwen zal het veld van de structuur met de nieuwe optie omitzero in de tag van de structuur worden weggelaten als de waarde nul is. Als het type veld een methode heeft IsZero() bool, zal deze worden gebruikt om te bepalen of de waarde nul is. Anders zal de waarde nul zijn als het nulwaarde voor zijn type. De omitzero-veldtag is schoner en minder foutgevoelig dan omitempty wanneer de bedoeling is nulwaarden over te slaan. In het bijzonder, in tegenstelling tot omitempty, slaat omitzero nul- time.Time waarden over, wat een veelvoorkomende bron van problemen is.

Als zowel omitempty als omitzero zijn opgegeven, zal het veld worden weggelaten als de waarde leeg of nul is (of beiden tegelijk).

UnmarshalTypeError.Field bevat nu ingebedde structuren om meer gedetailleerde foutmeldingen te bieden.

go/types

Alle data structuren go/types, die de paren van methoden zoals Len() int en At(int) T onthullen, hebben nu ook methoden die iterators teruggeven, wat het mogelijk maakt om de code zoals dit te vereenvoudigen:

params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }

Hier op:

for param := range fn.Signature().Params().Variables() { use(param) }

Methoden: Interface.EmbeddedTypes Interface.ExplicitMethods Interface.Methods MethodSet.Methods Named.Methods Scope.Children Struct.Fields Tuple.Variables TypeList.Types TypeParamList.TypeParams Union.Terms

hash/*

log/slog

Nieuwe DiscardHandler is een handler die nooit geactiveerd wordt en altijd zijn output weggooit.

Level en LevelVar implementeren nu het interface encoding.TextAppender.

math/*

net

ListenCondig gebruikt nu standaard MPTCP op systemen waar dit wordt ondersteund (voorlopig alleen Linux).

IP implementeren nu het interface encoding.TextAppender.

net/http

De beperking is veranderd Transport op ontvangen informatie antwoorden 1xx als reactie op de aanvraag. Eerder stopte dit de aanvraag en gaf een fout weer na het ontvangen van meer dan 5 antwoorden 1xx. Nu geeft dit alleen een fout weer als de totale grootte van alle antwoorden 1xx de configuratie-instelling overschrijdt Transport.MaxResponseHeaderBytes.

Bovendien, wanneer de aanvraag een hook heeft voor het volgen net/http/httptrace.ClientTrace.Got1xxResponse, is er nu geen beperking op het totale aantal antwoorden 1xx. De hook Got1xxResponse kan een fout retourneren om de aanvraag te stoppen.

Transport en Server hebben nu een HTTP2-veld dat het configureren van de HTTP/2 protocolinstellingen mogelijk maakt.

Nieuwe velden Server.Protocols en Transport.Protocols bieden een eenvoudige manier om te configureren welke HTTP-protocollen de server of de client gebruiken.

De server en client kunnen zo worden ingesteld dat ze onversleutelde verbindingen met HTTP/2 ondersteunen.

Wanneer Server.Protocols bevat UnencrypterHTTP2, de server accepteert HTTP/2 verbindingen op onversleutelde poorten. De server kan zowel HTTP/1 als onversleuteld HTTP/2 op dezelfde poort accepteren.

Wanneer Transport.Protocols bevat UnencryptedHTTP2 en bevat geen HTTP1, het transport zal onversleuteld HTTP/2 gebruiken voor adressen http://. Als de transport is geconfigureerd om zowel HTTP/1 als niet-gecodeerd HTTP/2 te gebruiken, zal het HTTP/1 gebruiken.

Ondersteuning voor niet-gecodeerd HTTP/2 maakt gebruik van 'HTTP/2 met voorafgaande kennis' (RFC 9113, sectie 3.3). De verouderde header 'Upgrade: h2c' wordt niet ondersteund.

net/netip

Adres, AdresPoort en Prefix implementeren nu interfaces encoding.BinaryAppender en encoding.TextAppender.

net/url

URL heeft nu ook de interface geïmplementeerd encoding.BinaryAppender.

os/user

In Windows Huidig kan nu worden gebruikt op Windows Nano Server. De implementatie is bijgewerkt om het gebruik van functies uit de NetApi32-bibliotheek, die ontbreekt in Nano Server, te vermijden.

In Windows Huidig, Zoekopdracht en ZoekId ondersteunen nu de volgende ingebouwde gebruikersservice-accounts:

  • NT AUTHORITY\SYSTEM
  • NT AUTHORITY\LOKALE DIENST
  • NT AUTHORITY\NETWERKDIENST

In Windows Huidig is aanzienlijk versneld wanneer de huidige gebruiker is verbonden met een langzame domein, wat gebruikelijk is voor veel zakelijke gebruikers. Nu is de prestaties van de implementatie in de orde van milliseconden, vergeleken met de vorige implementatie die enkele seconden, zelfs minuten, kon duren voordat deze was voltooid.

In Windows Huidig geeft nu de eigenaar van het proces terug wanneer de huidige thread zichzelf als een andere gebruiker voordoet. Voorheen gaf dit een foutmelding terug.

regexp

Regexp implementeren nu het interface encoding.TextAdapter.

runtime

Functie GOROOT is nu als verouderd verklaard. In de nieuwe code moet het systeempad voor het definiëren van de binaire 'go' worden geprefereerd en gebruik 'go env GOROOT' om GOROOT te bepalen.

strings

Package strings voegt verschillende functies toe voor het werken met iterators:

  • Lines geeft een iterator terug bij regelgebroken strings in de string.
  • SplitSeq geeft een iterator terug voor alle substrings van de string, gescheiden door de scheidingsteken.
  • SplitAfterSeq geeft een iterator terug voor substrings van de string, gescheiden na elke instantie van het scheidingsteken.
  • FieldsSeq geeft een iterator terug voor substrings van de string rond de reeksen spatie tekens, zoals gedefinieerd.unicode.IsSpace
  • FieldsFuncSeq geeft een iterator terug voor substrings van de string rond reeksen van Unicode-codepunten die voldoen aan de predicaat.

sync

Implementatie sync.Map is gewijzigd om de prestaties te verbeteren, vooral voor wijzigingen in het woordenboek. Bijvoorbeeld, het is minder waarschijnlijk dat er concurrentie is voor wijzigingen in niet-overlappende verzamelingen in grote woordenboeken, en er is geen tijdsverzwaring meer nodig om de concurrerende belasting van een laag-dichte woordenboek te bereiken.

Als u problemen tegenkomt, stel dan GOEXPERIMENT=nosynchashtriemap in tijdens de bouw om terug te keren naar de oude implementatie en alstublieft, vul het probleemformulier in.

testing

Nieuwe methoden T.Context en B.Context geven de context terug die wordt geannuleerd na het voltooien van de test en vóór het uitvoeren van de opruimfuncties.

Nieuwe methoden T.Chdir en B.Chdir kunnen worden gebruikt om de werkdirectory te veranderen tijdens de uitvoering van de test of benchmark.

text/template

Sjablonen ondersteunen nu range-over-func en range-over-int.

met behulp van de mutate-plugin, de vereiste tijdzone instellen en deze tijdstempel plaatsen in

Tijd implementeren nu de interfaces encoding.BinaryAppender en encoding.TextAppender.

Poorten

Linux

Hoe het was aangekondigd in de release-opmerkingen van Go 1.23, vereist Go 1.24 kernel Linux versie 3.2 of later.

Darwin

Go 1.24 is de laatste release die werkt op macOS 11 Big Sur. Go 1.25 zal macOS 12 Monterey of later vereisen.

WebAssembly

De compilerdirective go:wasmexport is toegevoegd aan Go-programma's om functies naar de WebAssembly-host te exporteren.

In WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) ondersteunt Go 1.24 het bouwen van een Go-programma als reactor/library door de bouwvlag -buildmode=c-shared op te geven.

Meer typen zijn nu toegestaan als argument- of resultaattype voor functies go:wasmimport. In het bijzonder zijn bool, string, uintptr en pointers naar specifieke typen toegestaan (details zijn te vinden in de documentatie), samen met 32-bits en 64-bits typen integers en floating point, en unsafe.Pointer, die al zijn toegestaan. Deze types zijn ook toegestaan als argument- of resultaattypes voor functies go:wasmexport.

Ondersteunende bestanden voor WebAssembly zijn verplaatst naar lib/wasm vanuit misc/wasm.

De oorspronkelijke geheugengrootte is aanzienlijk verminderd, vooral voor kleine WebAssembly-toepassingen.

Windows

De 32-bit Windows/ARM-poort (GOOS=windows GOARCH=arm) is gemarkeerd als defect. Details staan in #70705

Bron: linux.org.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster