Go 1.24

Go 1.24

Den nye version af Go-sproget, version 1.24, udkommer seks måneder efter Go 1.23. De fleste ændringer vedrører implementeringen af værktøjskæden, runtime og biblioteker. Som altid leverer udgivelsen løftet om kompatibilitet Go 1. Udviklerne bag sproget forventer, at næsten alle Go-programmer fortsat kan kompileres og køre som før.

Ændringer i sproget

Go 1.24 understøtter nu fuldt ud generiske typealias: et typealias kan parameteriseres som en erklæret type. Yderligere oplysninger findes i sprog-specifikationen. Indtil videre kan muligheden deaktiveres ved at indstille GOEXPERIMENT=noaliastypeparams; dog vil indstillingen aliastypeparams blive fjernet i Go 1.25.

Værktøjer

Go-kommandoen

Go-moduler kan nu holde styr på kørende afhængigheder ved at bruge værktøjsdirektivet i go.mod. Dette fjerner behovet for den tidligere workaround, hvor værktøjer blev tilføjet som tomme importer i filen, ofte kaldet “tools.go”. Go-værktøjskommandoen kan nu køre disse værktøjer sammen med de værktøjer, der leveres med Go. Flere oplysninger kan ses i dokumentationen.

Den nye -tool-flag for go get tilføjer værktøjsdirektivet til den aktuelle modul for de angivne pakker ud over at tilføje kravsdirektivet.

Ny metamønster tool henviser til alle værktøjer i den aktuelle modul. Dette kan bruges til at opdatere dem alle via go get tool eller til at installere dem i din GOBIN-mappe via go install tool.

Kørbare filer oprettet med go run og den nye adfærd for go tool bliver nu cache't i Go's bygningscache. Dette gør gentagne opstarter hurtigere takket være den øgede cache. #69290.

Go build- og go install-kommandoerne accepterer nu flaget -json, som rapporterer output og fejl i bygningen som struktureret JSON-output til standardoutput. Detaljer om formatet kan ses i go help buildjson.

Desuden rapporterer go test -json nu output og fejl i bygningen i JSON, blandet med JSON'ens testresultater. De kan adskilles ved de nye Action-typer, men hvis de forårsager problemer i testsystemintegrationen, kan man gå tilbage til tekstoutputet fra bygningen via GODEBUG-indstillingen gotestjsonbuildtext=1.

Den nye miljøvariabel GOAUTH giver en fleksibel måde at autorisere private modultræk på. Se detaljer i go help goauth.

Go build-kommandoen installer nu versionen af den primære modul i den kompilerede binærfil, baseret på tagget og/eller committet i versionskontrolsystemet. Suffikset +dirty vil blive tilføjet, hvis der er ucommitterede ændringer. Flaget -buildvcs=false kan bruges til at udelade versionskontroloplysninger fra binærfilen.

Ny indstilling GODEBUG toolchaintrace=1 kan nu bruges til at overvåge procesvalget af toolchain i go-teamet.

Cgo

Cgo understøtter nye annotationer for C-funktioner for at forbedre ydeevnen i runtime. #cgo noescape cFunctionName fortæller compiler, at den hukommelse, der overføres til C-funktionen cFunctionName, ikke vil forsvinde. #cgo nocallback cFunctionName signalerer til compileren, at C-funktionen cFunctionName ikke tilbagekalder nogen Go-funktioner. Mere information kan ses i cgo-dokumentationen.

Cgo nægter i øjeblikket at kompilere kald til C-funktioner, der har flere uforenelige erklæringer. For eksempel, hvis f er erklæret som både void f(int) og void f(double), vil cgo returnere en fejl i stedet for at generere en forkert opkaldssekvens f(0). Nyttigt i denne udgivelse er forbedret detektion af denne fejltilstand, når uforenelige erklæringer vises i forskellige filer. #67699.

Objdump

Objdump-værktøjet understøtter nu disassemblage på 64-bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) og S390X (GOARCH=s390x).

Vet

Den nye tests-analyzator rapporterer almindelige fejl i testdeclarationer, fuzzere, benchmarks og eksempler i testpakker, såsom forkert formaterede navne, forkerte signaturer eller eksempler, der dokumenterer ikke-eksisterende identifikatorer. Nogle af disse fejl kan føre til, at tests ikke kører.

Den eksisterende printf-analyzator rapporterer nu diagnose for opkald i formen fmt.Printf(s), hvor s er en ikke-konstant formatstreng, uden andre argumenter. Sådanne opkald er næsten altid en fejl, da værdien s kan indeholde %; brug i stedet fmt.Print. 60529. Denne kontrol har tendens til at finde fejl i eksisterende kode, og anvendes derfor kun, når sprogversionen (som angivet af go-directivet i go.mod-fil eller kommentarer `//go:build) mindst er Go 1.24 for at undgå at forårsage fejl under kontinuerlig integration ved opgradering til Go 1.24 toolchain.

Den eksisterende buildtag-analyse rapporterer nu diagnostik, når der er en forkert byggegrænsen for en nyere version Go i direktivet //go:build. For eksempel refererer //go:build go1.23.1 til et patchrelease; brug i stedet //go:build go1.23. #64127.

Den eksisterende copylock-analyse rapporterer nu diagnostik, når en variabel, der er erklæret i en triple 'for'-løkke, som for i := iter(); done(i); i = next(i) { ... }, indeholder sync.Locker, såsom sync.Mutex. Go 1.22 ændrede adfærden for sådanne løkker til at oprette en ny variabel for hver iteration, ved at kopiere værdier fra den foregående iteration; denne kopiering er usikker for lås. #66387.

GOCACHEPROG

Det interne binære cmd/go og testcache-mekanismen kan nu implementeres af underprocesser, der implementerer JSON-protokollen mellem cmd/go-værktøjet og en underproces, der er navngivet i miljøvariablen GOCACHEPROG. Tidligere var det under GOEXPERIMENT. Protokoloplysninger kan ses i dokumentationen.

Udførelsestid

Flere ydeevneforbedringer i runtime har reduceret CPU-overhead med 2-3% i gennemsnit blandt et sæt repræsentative benchmarks. Resultaterne kan variere afhængigt af applikationen. Disse forbedringer inkluderer en ny indbygget map-implementering baseret på Svenske Tabel, mere effektiv allokering af hukommelse til små objekter og en ny intern runtime-muteximplementering.

Den nye indbyggede map-implementering og den nye interne runtime-mutex kan deaktiveres ved at sætte GOEXPERIMENT=noswissmap og GOEXPERIMENT=nospinbitmutex under bygningen henholdsvis.

Kompilator

Kompilatoren har allerede forbudt at definere nye metoder med modtagertyper, der er genereret af cgo, men det var muligt at omgå denne begrænsning gennem typealias. Go 1.24 rapporterer nu altid en fejl, hvis modtageren angiver en genereret cgo-typen direkte eller indirekte (gennem typealias).

Linker

Linkeren genererer nu et GNU build-id (ELF NT_GNU_BUILD_ID post) på ELF-platforme og UUID (Mach-O LC_UUID kommando) på macOS som standard. Build-id eller UUID genereres fra Go-build-id'en. Dette kan deaktiveres med linkerflaget -B none eller overskrives med linkerflaget -B 0xNNNN med et brugerdefineret hex-værdi.

Rulning

Som angivet i Go 1.22' s udgivelsesnoter, Go 1.24 kræver nu Go 1.22.6 eller nyere for at kunne bruges. Udviklerne forventer, at Go 1.26 vil kræve punktudgivelsen Go 1.24 eller nyere.

Standardbibliotek

Begrænset adgang til filsystemet i en mappe

Ny type os.Root giver mulighed for at udføre filsystemoperationer inden for en bestemt mappe.

Funktion os.OpenRoot åbner mappen og returnerer os.Root. Metoderne på os.Root opererer i denne mappe og tillader ikke stier at referere til placeringer uden for mappen, inklusive dem, der følger med symbolske links ud af mappen. Metoderne på os.Root afspejler de fleste filsystemoperationer tilgængelige i os-pakken, herunder for eksempel os.Root.Open, os.Root.Create, os.Root.Mkdir og os.Root.Stat.

Ny benchmark-funktion

Benchmarking kan nu bruge en hurtigere og mindre fejlene metode testing.B.Loop til iteration af benchmarks såsom for b.Loop() { … } i stedet for typiske loopstrukturer med b.N såsom for range b.N. Dette giver to betydelige fordele:

  • Benchmark-funktionen udføres præcist én gang for hver -count, således at dyre installations- og oprydningstrin kun udføres én gang.
  • Funktionsparametre og resultater forbliver i live, hvilket forhindrer kompileringsoptimering af løkkens krop.

Forbedrede finalizers

Ny funktion runtime.AddCleanup er en afslutningsmekanisme, der er mere fleksibel, mere effektiv og mindre fejlbehæftet end runtime.SetFinalizer. AddCleanup vedhæfter en opryddelsesfunktion til objektet, som vil blive udført, så snart objektet ikke længere er tilgængeligt. Men i modsætning til SetFinalizer kan flere oprydninger vedhæftes ét objekt, oprydninger kan vedhæftes interne pegere, oprydninger forårsager normalt ikke hukommelseslækager, når objekterne danner en cyklus, og oprydninger forsinker ikke frigivelsen af det objekt eller de objekter, som det peger på. Ny kode bør foretrække AddCleanup frem for SetFinalizer.

Ny weak-pakke

Den nye pakke weak giver svage peger.

Svage peger er et lavniveau primitiv, der tilbydes til at skabe strukturer, der effektivt udnytter hukommelse, såsom svage ordlister til at kortlægge værdier, kanoniseringsordlister til alt, der ikke dækkes af unique, og forskellige typer cache. For at understøtte disse brugsscenarier tilbyder denne version også runtime.AddCleanup og maphash.Comparable.

Den nye pakke crypto/mlkem

Den nye pakke crypto/mlkem implementerer ML-KEM-768 og ML-KEM-1024.

ML-KEM er en post-kvantum nøgleudvekslingsmekanisme, tidligere kendt som Kyber og specificeret i FIPS 203.

Nye pakker crypto/hkdf, crypto/pbkdf2 og crypto/sha3

Den nye pakke crypto/hkdf implementerer en HMAC-baseret nøgleudvinding funktion “Extract-and-Expand” HKDF, som defineret i RFC 5869.

Den nye pakke crypto/pbkdf2 implementerer en password-baseret nøgleudvinding funktion PBKDF2, som defineret i RFC 8018.

Den nye pakke crypto/sha3 implementerer hash-funktionen SHA-3 og SHAKE samt cSHAKE funktioner for udvidelig udgang, som defineret i FIPS 202.

Alle tre pakker er baseret på eksisterende pakker fra golang.org/x/crypto/….

FIPS 140-3 compliance

Denne version inkluderer et nyt sæt mekanismer til at sikre FIPS 140-3 compliance.

Go's kryptografiske modul er et sæt interne pakker fra standardbiblioteket, der transparent bruges til at implementere godkendte FIPS 140-3 algoritmer. Applikationer kræver ikke ændringer for at anvende Go's kryptografiske modul til godkendte algoritmer.

Den nye miljøvariabel GOFIPS140 kan bruges til at vælge den version af Go's kryptografiske modul, der skal bruges i bygningen. Den nye indstilling GODEBUG fips140 kan bruges til at aktivere FIPS 140-3 mode under kørsel.

Go 1.24 inkluderer Go's kryptografiske modul version v1.0.0, som i øjeblikket testes med en akkrediteret CMVP-laboratorium.

Den nye eksperimentelle pakke testing/synctest

Den nye eksperimentelle pakke testing/synctest giver support til test af concurrent kode.

  • Funktion synctest.Run starter en gruppe gorutiner i en isoleret “bubble”. I boblen fungerer pakke-funktionerne time på falske ur.
  • Functions synctest.Wait venter på, at alle gorutiner er blokeret i den nuværende boble.

Detaljer kan findes i pakkens dokumentation.

Pakken synctest er eksperimentel og skal aktiveres ved at sætte GOEXPERIMENT=synctest. API'en i pakken kan ændre sig i fremtidige versioner. Du #67434 kan finde flere detaljer og give feedback.

Mindre ændringer i biblioteket

archive

Implementeringerne (*Writer.AddFS) i archive/zip og archive/tar skriver nu headeren for en tom mappe.

bytes

Pakken bytes tilføjer flere funktioner, der arbejder med iteratorer:

  • Lines returnerer en iterator over linjer adskilt af nye linjer i et byte slice.
  • SplitSeq returnerer en iterator over alle delsekvenser af byte-slices, opdelt med en separator.
  • SplitAfterSeq returnerer en iterator over delsekvenser af byte-slices, opdelt efter hver forekomst af separatoren.
  • FieldsSeq returnerer en iterator over delsekvenser af byte-slices omkring sekvenser af mellemrum, som defineret. unicode.IsSpace
  • FieldsFuncSeq returnerer en iterator over delsekvenser af byte-slices omkring sekvenser af unicode-kodepunkter, der opfylder et præg.

crypto/aes

Værdien, der returneres NewChipher implementerer ikke længere metoderne NewCTR, NewGCM, NewCBCEncrypter og NewCBCDecrypter. Disse metoder var u-dokumenterede og var ikke tilgængelige på alle arkitekturer. Nu er værdien Block skal overføres direkte til de relevante funktioner crypto/cipher. På nuværende tidspunkt kontrollerer crypto/cipher stadig disse metoder på Block-værdier, selvom de ikke længere understøttes af standardbiblioteket.

crypto/cipher

Ny funktion NewGCMWithRandomNonce returnerer AEAD, som implementerer AES-GCM, genererer et tilfældigt engangsnummer under Seal og tilføjer det til begyndelsen af den krypterede tekst.

Implementering Stream, der returneres NewCTR ved brug sammen med crypto/aes er nu flere gange hurtigere på amd64 og arm64.

NewOFB, NewCFBEncrypter og NewCFBDecrypter er nu erklæret forældet. OFB- og CFB-tilstande er ikke autentificerede, hvilket generelt giver aktive angreb mulighed for at manipulere og genskabe klartekst. Applikationer anbefales at bruge AEAD i stedet. Hvis en ikke-autentificeret tilstand Stream er nødvendig, kan NewCTR bruges i stedet.

crypto/ecdsa

PrivateKey.Sign genererer nu en deterministisk signatur i overensstemmelse med RFC 6979, hvis tilfældighedskilden er nil.

crypto/md5

Værdien, der returneres md5.New, implementerer nu også interfacet encoding.BinaryAppender.

crypto/rand

Funktion Læs garanterer nu fravær af fejl. Hvis Read støder på en fejl under læsning Reader, afslutter programmet katastrofalt. Bemærk, at standard Reader er dokumenteret til altid at arbejde korrekt, så denne ændring bør kun påvirke de programmer, der overskriver Reader-variablen. Den eneste undtagelse er Linux-kerneller før version 3.17, hvor standard Reader stadig åbner /dev/urandom og kan fejle.

På Linux 6.11 og senere bruger Reader nu systemopkaldet getrandom via vDSO. Dette er flere gange hurtigere, normalt ved små læsninger.

På OpenBSD bruger Reader nu arc4random_buf(3).

Ny funktion Text kan nu generere kryptografisk sikre tilfældige tekststrenge.

crypto/rsa

GenerateKey returnerer nu en fejl, hvis der anmodes om en nøgle med en længde på mindre end 1024 bit. Alle metoder Sign, Verify, Encrypt og Decrypt returnerer nu en fejl, hvis de bruges med en nøgle, der er mindre end 1024 bit. Sådanne nøgler er usikre og bør ikke anvendes. GODEBUG-indstillinger rsa1024min=0 genopretter den gamle adfærd, men Go-udviklere anbefaler kun at gøre dette, når det er nødvendigt, og kun til testformål, for eksempel ved at tilføje linjen //go:debug rsa1024min=0 i testfilen. Ny eksempel GenerateKey giver en nemt anvendelig standard 2024-bit testnøgle.

Det er nu sikkert og mere effektivt at kalde PrivateKey.Precompute op til PrivateKey.Validate. Precompute er nu hurtigere i nærværelse af delvist udfyldte PrecomputedValues, for eksempel ved at udtrække nøglen fra JSON.

Pakke afviser nu flere forkerte nøgler, selv når Validate ikke kaldes, og GenerateKey kan nu returnere nye fejl for brudte tilfældige kilder. Felterne Primes og Precomputed struct seccomp_data PrivateKey bruges og valideres nu, selv når nogle værdier mangler. Der er også foretaget ændringer i crypto/x509 vedrørende fortolkning og udtrækning af RSA-nøgler, beskrevet nedenfor.

SignPKCS1v15 og VerifyPKCS1v15 understøtter nu SHA-512/224, SHA-512/256 og SHA-3.

GenerateKey bruger nu en lidt anden metode til at generere den private eksponent (Carmichael-funktionen i stedet for Eulers funktion). Sjældne anvendelser, der udefra genskaber nøgler kun fra primtallene, kan skabe forskellige, men kompatible resultater.

Operationer med offentlige og private nøgler er nu op til to gange hurtigere på wasm.

crypto/sha*

crypto/subtle

Ny funktion WithDataIndependentTiming giver brugeren mulighed for at udføre funktionen med aktiverede prøvespecifikke funktioner, som sikrer uændret bestemte instruktioner med hensyn til tid og dataværdier. Dette kan bruges til at sikre, at koden, der er designet til at køre på konstant tid, ikke er blevet optimeret af processorens funktionsniveau på en måde, så den kører i varierende tid. I øjeblikket bruger WithDataIndependentTiming bit PSTATE.DIT på arm64 og gør ingenting på alle andre arkitekturer. GODEBUG-indstillinger dataindependenttiming=1 aktiverer DIT-tilstand for hele Go-programmet.

Output XORBytes skal enten overlappe helt eller slet ikke med indgangen. Tidligere var adfærden udefineret i modsat fald, mens XORBytes nu vil panikere.

crypto/tls

TLS-serveren understøtter nu Encrypted Client Hello (ECH). Denne funktion kan aktiveres ved at udfylde feltet Config.EncryptedClientHelloKeys.

Den nye post-kvant nøgleudvekslingsmekanisme X25519MLKEM768 understøttes nu og er aktiveret som standard, når Config.CurvePreferences er nil. GODEBUG-indstillinger tlsmlkem=0 returnerer standard.

Understøttelse af den eksperimentelle nøgleudveksling X25519Kyber768Draft00 er blevet fjernet.

Nøgleudvekslingsrækkefølgen håndteres nu fuldt ud af pakken crypto/tls. Rækkefølgen Config.CurvePreferences bliver nu ignoreret, og indholdet bruges kun til at bestemme, hvilke nøgleudvekslinger der skal aktiveres, når feltet er udfyldt.

Nyt felt ClientHelloInfo.Extensions opregner listen over extensions-IDer modtaget i Client Hello-beskeden. Dette kan være nyttigt til client TLS fingerprinting.

crypto/x509

GODEBUG-indstillinger x509sha1 er blevet fjernet. Certficicate.Verify understøtter ikke længere underskrifter baseret på SHA-1.

OID implementerer nu interfaces encoding.BinaryAppender og encoding.TextAppender.

Standardfeltet for certifikatpolitikker er blevet ændret fra Certificate.PolicyIdentifiers og få en fungerende kommando. Certificate.Policies. Ved parsing af certifikater vil begge felter blive udfyldt, men ved oprettelse af certifikatpolitikker vil de blive taget fra feltet Certificate.Policies i stedet for Certificate.PolicyIdentifiers. Denne ændring kan blive ændret ved indstillingen GODEBUG x509usepolicies=0.

CreateCertificate vil nu generere et serienummer ved hjælp af en RFC 5280-kompatibel metode ved at overføre skabelon gennem feltet Certificate.SerialNumber nil, i stedet for at fejle.

Certificate.Verify understøtter nu validering af politikker, som defineret i RFC 5280 og RFC 9618. Det nye felt VerifyOptions.CertificatePolicies kan sættes til et acceptabelt sæt politikker OIDs. Kun kedjer med gyldige politikker returneres fra Certificate.Verify.

MarshalPKCS8PrivateKey returnerer nu en fejl i stedet for at udtrække en forkert RSA-nøgle. (MarshalPKCS1PrivateKey returnerer ikke en fejl, og dens adfærd med de forkerte nøgler forbliver udefineret.)

ParsePKCS1PrivateKey og ParsePKCS8PrivateKey bruger nu og validerer de kodede CRT-værdier, så de kan afvise forkerte RSA-nøgler, der tidligere blev accepteret. Brug af GODEBUG-indstillinger x509rsacrt=0 returnerer til rekalkuleringen af CRT-værdier.

debug/elf

Pakken debug/elf tilføjer understøttelse til håndtering af versionsnumre i dynamiske ELF-filer (Executable and Linkable Format). Den nye metode File.DynamicVersions returnerer en liste over de dynamiske versioner, der er defineret i ELF-filen. Den nye metode File.DynamicVersionNeeds returnerer en liste over de dynamiske versioner, der kræves af denne ELF-fil, som er defineret i andre ELF-objekter. Endelig indikerer de nye felter Symbol.HasVersion og Symbol.VersionIndex symbolets version.

encoding

To nye interfaces TextAppender og BinaryAppender er blevet introduceret til at tilføje en tekst- eller binær repræsentation af objektet til et byte-slice. Disse interfaces giver samme funktionalitet som TextMarshaler og BinaryMarshaler, men i stedet for at allokere et nyt slice hver gang, tilføjer de data direkte til det eksisterende slice. Disse interfaces er nu implementeret af standardbibliotekstyper, der allerede implementerer TextMarshaler og/eller BinaryMarshaler.

encoding/json

Når strukturen genereres, vil feltet med den nye omitzero mulighed i feltets tag blive udeladt, hvis værdien er nul. Hvis feltets type har en metode IsZero() bool, vil den blive brugt til at bestemme, om værdien er nul. Ellers vil værdien være nul, hvis den er nul-værdi for sin type. Felt-tagget omitzero er renere og mindre fejlbehæftet end omitempty, når intentionen er at udelade nulværdier. I særdeleshed, i modsætning til omitempty, udelader omitzero nulværdier, time.Time som er en almindelig kilde til problemer.

Hvis både omitempty og omitzero angives, vil feltet blive udeladt, hvis værdien er tom eller nul (eller begge dele sammen).

UnmarshalTypeError.Field inkluderer nu indbyggede strukturer til at give mere detaljerede fejlmeddelelser.

go/types

Alle datatyper i go/types, der afslører sekvenser af par metoder som Len() int og At(int) T, har nu også metoder, der returnerer iteratorer, hvilket gør det lettere at skrive kode som denne:

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

Til dette:

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/*

log/slog

Ny DiscardHandler er en handler, der aldrig er inkluderet og altid kasserer sin output.

Niveau og LevelVar implementerer nu interface encoding.TextAppender.

math/*

net

ListenConfig bruger nu MPTCP som standard på systemer, hvor det understøttes (aktuelt kun Linux).

IP implementerer nu interface encoding.TextAppender.

net/http

Ændret begrænsning Transport på modtagne informationssvar 1xx som svar på anmodning. Tidligere stoppede dette anmodningen og returnerede en fejl efter modtagelse af mere end 5 svar 1xx. Nu returneres der kun en fejl, hvis den samlede størrelse af alle svar 1xx overstiger konfigurationsindstillingen Transport.MaxResponseHeaderBytes.

Derudover, når der er en hændelse til at spore net/http/httptrace.ClientTrace.Got1xxResponse, er der nu ingen begrænsning på det samlede antal svar 1xx. Got1xxResponse-hændelsen kan returnere en fejl for at stoppe anmodningen.

Transport og Server har nu et HTTP2-felt, som tillader konfiguration af HTTP/2-protokolindstillinger.

Nye felter Server.Protocols og Transport.Protocols giver en enkel måde at konfigurere, hvilke HTTP-protokoller serveren eller klienten bruger.

Server og klient kan konfigureres til at understøtte ukrypterede HTTP/2-forbindelser.

Når Server.Protocols indeholder UnencrypterHTTP2, serveren vil acceptere HTTP/2-forbindelser på ukrypterede porte. Serveren kan acceptere både HTTP/1 og ukrypteret HTTP/2 på den samme port.

Når Transport.Protocols indeholder UnencryptedHTTP2 og har ikke HTTP1, transporten vil bruge ukrypteret HTTP/2 for adresser http://. Hvis transporten er konfigureret til at bruge både HTTP/1 og ukrypteret HTTP/2, vil den benytte HTTP/1.

Understøttelsen af ukrypteret HTTP/2 bruger "HTTP/2 med forudgående kendskab" (RFC 9113, sektion 3.3). Den forældede header "Upgrade: h2c" understøttes ikke.

net/netip

Addr, AddrPort og Prefix implementerer nu grænseflader encoding.BinaryAppender og encoding.TextAppender.

net/url

URL implementerer nu også grænsefladen encoding.BinaryAppender.

os/user

direkte sammensætning (Direct Composition), hvilket burde have en positiv indvirkning på ydeevnen. Derudover Current kan nu anvendes i Windows Nano Server. Implementeringen er opdateret for at undgå anvendelse af funktioner fra NetApi32-biblioteket, som ikke findes i Nano Server.

direkte sammensætning (Direct Composition), hvilket burde have en positiv indvirkning på ydeevnen. Derudover Current, Lookup og LookupId understøtter nu følgende indbyggede brugerkonti:

  • NT AUTHORITYSYSTEM
  • NT AUTHORITYLOCAL SERVICE
  • NT AUTHORITYNETWORK SERVICE

direkte sammensætning (Direct Composition), hvilket burde have en positiv indvirkning på ydeevnen. Derudover Current er blevet betydeligt accelereret, når den nuværende bruger er tilsluttet et langsomt domæne, hvilket er en almindelig situation for mange virksomhedsanvendere. Den nye ydeevne for implementeringen er nu i millisekunder, sammenlignet med den tidligere implementering, som kunne tage flere sekunder, endda minutter, for at færdiggøre.

direkte sammensætning (Direct Composition), hvilket burde have en positiv indvirkning på ydeevnen. Derudover Current returnerer nu ejeren af processen, når den nuværende tråd udgiver sig for en anden bruger. Tidligere returnerede det en fejl.

regexp

Regexp implementerer nu interface encoding.TextAdapter.

runtime

Funktion GOROOT er nu blevet erklæret forældet. I den nye kobling bør det foretrækkes at bruge systemstien til at bestemme binæren "go", og bruge go env GOROOT til at bestemme GOROOT.

strings

Pakken strings tilføjer flere funktioner til at arbejde med iteratører:

  • Lines returnerer en iterator for linjer adskilt af nye linjer i en streng.
  • SplitSeq returnerer en iterator for alle substrenge i en streng, adskilt af separatoren.
  • SplitAfterSeq returnerer en iterator for substrenge i strengen, adskilt efter hver forekomst af separatoren.
  • FieldsSeq returnerer en iterator for substrenge i strengen omkring sekvenser af hvide tegn, som defineretunicode.IsSpace
  • FieldsFuncSeq returnerer en iterator for substrenge i strengen omkring sekvenser af unicode-kodede punkter, der opfylder predikatet.

synk

Implementering sync.Map er blevet ændret til at forbedre ydeevnen, især for ændringer i ordbøger. For eksempel er der mindre sandsynlighed for konkurrence om ændringer af ikke-overlappende mængder i store ordbøger, og det kræver ikke længere tid til opbygning for at nå en lav konkurrencebelastning i ordbogen.

Hvis du møder problemer, skal du indstille GOEXPERIMENT=nosynchashtriemap under kompileringen for at vende tilbage til den gamle implementering, og venligst udfyld problemmeldingsformularen.

testing

Nye metoder T.Context og B.Context returnerer konteksten, som annulleres efter testen er afsluttet og før oprydningsfunktionerne udføres.

Nye metoder T.Chdir og B.Chdir kan bruges til at ændre arbejdsbiblioteket i test- eller benchmarkperioden.

text/template

Skabeloner understøtter nu range-over-func og range-over-int.

time

Tid implementerer nu interfaces encoding.BinaryAppender og encoding.TextAppender.

Porter

Linux

Hvordan det var tilkendegivet i udgivelsesnoterne til Go 1.23, Go 1.24 kræver Linux-kernen version 3.2 eller senere.

Darwin

Go 1.24 er den sidste version, der vil fungere på macOS 11 Big Sur. Go 1.25 vil kræve macOS 12 Monterey eller senere.

WebAssembly

Kompilerdirektivet go:wasmexport er tilføjet til Go-programmer for at eksportere funktioner til WebAssembly værten.

I WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) understøtter Go 1.24 kompilering af Go-programmer som reactor/library ved at angive byggemodusflagget -buildmode=c-shared.

Flere typer er nu tilladt som argument- eller resultat_type for funktioner go:wasmimport. Især er bool, string, uintptr og pointere til bestemte typer tilladt (detaljer kan ses i dokumentationen), sammen med 32-bit og 64-bit heltalstyper og flydende tal, samt unsafe.Pointer, som allerede er tilladt. Disse typer er også tilladt som argument- eller resultat_type for funktioner go:wasmexport.

Supportfiler til WebAssembly er blevet flyttet til lib/wasm fra misc/wasm.

Den oprindelige hukommelsesstørrelse er blevet reduceret betydeligt, især for små WebAssembly-applikationer.

Windows

32-bit Windows/ARM-porten (GOOS=windows GOARCH=arm) er blevet markeret som defekt. Detaljer i #70705

Kilde: linux.org.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster