Go 1.24

Go 1.24

Den nye utgaven av Go-språket, versjon 1.24, kommer seks måneder etter Go 1.23. Det er de fleste endringene i implementeringen av verktøykjeden, runtime og biblioteker. Som alltid gir utgivelsen løftet om kompatibilitet Go 1. Utviklerne bak språket forventer at nesten alle Go-programmer fortsatt vil kunne kompilere og fungere som før.

Endringer i språket

Go 1.24 støtter nå fullt ut generiske typealiaser: typealias kan parameteriseres som en erklært type. Detaljer finnes i språkspesifikasjonen. Per nå kan denne funksjonaliteten deaktiveres ved å sette GOEXPERIMENT=noaliastypeparams; men alternativet aliastypeparams vil bli fjernet i Go 1.25.

Tools

Go-kommandoen

Go-moduler kan nå spore kjørende avhengigheter ved å bruke verktøydirektivet i go.mod. Dette fjerner behovet for den tidligere arbeidsrundingen med å legge til verktøy som tomme importer i filen, vanligvis kalt “tools.go”. Go-verktøyet kan nå kjøre disse verktøyene i tillegg til de som følger med Go. Mer informasjon finnes i dokumentasjonen.

Det nye flagget -tool for go get fører til at verktøydirektivet legges til i den nåværende modulen for de spesifiserte pakkene i tillegg til å legge til kravsdirektivet.

Ny metamønsteret tool refererer til alle verktøyene i den nåværende modulen. Dette kan brukes til å oppdatere dem alle via go get tool eller for å installere dem i GOBIN-katalogen din via go install tool.

Kjørbare filer opprettet med go run og det nye atferden til go tool blir nå bufret i Go-byggbufferen. Dette gjør det mulig med raskere påfølgende kjøringer takket være den økte bufferen. #69290.

Go build- og go install-kommandoene godtar nå flagget -json, som rapporterer utdata og byggefeil som strukturert JSON i standardutdata. Detaljer om formatet kan sees i go help buildjson.

Videre rapporterer go test -json nå utdata og byggefeil i JSON, sammen med JSON for testresultatet. De kan skilles ved hjelp av nye Action-typer, men dersom de skaper problemer i testintegrasjonssystemet, kan man gå tilbake til tekstformatet for byggingen gjennom innstillingen GODEBUG gotestjsonbuildtext=1.

Den nye miljøvariabelen GOAUTH gir en fleksibel måte å autentisere private nedlastinger av moduler. Se detaljer i go help goauth.

Go build-kommandoen kan nå sette versjonen av hovedmodulen i den kompilerte binærfilen, basert på taggen og/eller commit av versjonskontrollsystemet. Suffixet +dirty vil bli lagt til ved uforpliktede endringer. Du kan bruke flagget -buildvcs=false for å utelate versjonskontrollinformasjonen fra binærfilen.

Ny innstilling av GODEBUG toolchaintrace=1 kan nå brukes til å spore prosessen med å velge verktøykjede i Go-teamet.

Cgo

Cgo støtter nye annotasjoner for C-funksjoner for å forbedre kjøretidseffektiviteten. #cgo noescape cFunctionName forteller kompilatoren at minnet som sendes til C-funksjonen cFunctionName ikke kan forsvinne. #cgo nocallback cFunctionName forteller kompilatoren at C-funksjonen cFunctionName ikke tilbakekaller noen Go-funksjoner. Mer informasjon kan sees i cgo-dokumentasjonen.

Cgo avviser nå kompilering av C-funksjonskall som har flere inkompatible deklarasjoner. For eksempel, hvis f er deklarert som både void f(int) og void f(double), vil cgo rapportere en feil i stedet for å muligens generere en feil sekvens av kall til f(0). En nyhet i denne utgaven er forbedret oppdagelse av denne feilsituasjonen når inkompatible deklarasjoner forekommer i forskjellige filer. #67699.

Objdump

Verktøyet objdump støtter nå disassemblering på 64-bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) og S390X (GOARCH=s390x).

Vet

Den nye testanalysatoren rapporterer vanlige feil i testdeklarasjoner, fuzzers, benchmarks og eksempler i testpakker, som feilaktig formaterte navn, feilaktige signaturer eller eksempler som dokumenterer ikke-eksisterende identifikatorer. Noen av disse feilene kan føre til at tester ikke kjøres.

Den eksisterende printf-analysatoren rapporterer nå diagnostikk for kall av formen fmt.Printf(s), der s er en ikke-konstant formatstreng uten andre argumenter. Slike kall er nesten alltid en feil, ettersom verdien s kan inneholde tegnet %; bruk i stedet fmt.Print. 60529. Denne sjekken har en tendens til å avdekke funn i eksisterende kode, og derfor brukes den bare når språkversjonen (som angitt av direktivet go-filen go.mod eller kommentarene `//go:build) er minst Go 1.24, for å unngå problemer med kontinuerlig integrasjon når man oppgraderer til Go 1.24-verktøykjeden.

Den eksisterende buildtag-analyzeren rapporterer nå diagnostikk når det er feil for bygging av eldre versjoner Go i direktivet //go:build. For eksempel, //go:build go1.23.1 refererer til et punktutgivelse; i stedet bruk //go:build go1.23. #64127.

Den eksisterende copylock-analyzeren rapporterer nå diagnostikk når en variabel erklært i en tredobbel 'for'-løkke, som for i := iter(); done(i); i = next(i) { ... }, inneholder sync.Locker, som sync.Mutex. Go 1.22 endret oppførselen til slike løkker ved å opprette en ny variabel for hver iterasjon, og kopiere verdiene fra den forrige iterasjonen; denne kopieringen er ikke trygg for lås. #66387.

GOCACHEPROG

Den interne binæren cmd/go og testcache-mekanismer kan nå implementeres av dataprocesser som implementerer JSON-protokollen mellom cmd/go-verktøyet og barneprosessen, kalt miljøvariabelen GOCACHEPROG. Dette var tidligere under GOEXPERIMENT. Detaljer om protokollen kan sees i dokumentasjonen.

Kjørets tid

Flere ytelsesforbedringer i runtime har redusert CPU-overhead med 2-3% i gjennomsnitt blant et sett med representative benchmarktester. Resultatene kan variere avhengig av applikasjonen. Disse forbedringene inkluderer en ny innebygd implementering av map basert på Svensk Tabeller, mer effektiv allokering av minne for små objekter og en ny intern implementering av mutex i runtime.

Den nye innebygde implementeringen av map og den nye interne mutexen i runtime kan deaktiveres med innstillingene GOEXPERIMENT=noswissmap og GOEXPERIMENT=nospinbitmutex under bygging.

Kompilator

Kompilatoren har allerede forbudt definisjoner av nye metoder med mottaker-typer som er generert av cgo, men det var mulig å omgå denne begrensningen gjennom type-alias. Go 1.24 rapporterer nå alltid en feil hvis mottakeren angir en generert cgo-type, direkte eller indirekte (gjennom type-alias).

Linker

Linkeren genererer nå en GNU bygg-ID (ELF NT_GNU_BUILD_ID-opptak) på ELF-plattformer og UUID (Mach-O LC_UUID-byttekommando) på macOS som standard. Bygg-ID-en eller UUID-en er utledet fra Go-bygg-ID-en. Dette kan slås av med linker-flagget -B none, eller overstyres med linker-flagget -B 0xNNNN med et brukerdefinert heksadesimalt verdi.

Utrulling

Som angitt i Go 1.22 utgivelsesnotater, Go 1.24 krever nå Go 1.22.6 eller nyere for å være kompatibel. Utviklerne forventer at Go 1.26 vil kreve en punktutgave av Go 1.24 eller nyere.

Standardbiblioteket

Begrenset katalogtilgang til filsystemet

Ny type os.Root tilbyr muligheten til å utføre filsystemoperasjoner innen en bestemt katalog.

kan os.OpenRoot åpner katalogen og returnerer os.Root. Metodene på os.Root opererer innen denne katalogen og tillater ikke stier å referere til lokasjoner utenfor katalogen, inkludert de som følger symboliske lenker utenfor katalogen. Metodene på os.Root gjenspeiler de fleste filsystemoperasjonene tilgjengelig i os-pakken, inkludert, for eksempel, os.Root.Open, os.Root.Create, os.Root.Mkdir og os.Root.Stat.

Ny benchmark-funksjon

Benkmarkene kan nå bruke en raskere og mindre feilutsatt metode testing.B.Loop for å iterere i benchmarker som for b.Loop() { … } i stedet for typiske sløyfestrukturer involverende b.N som for range b.N. Dette gir to betydelige fordeler:

  • Benchmark-funksjonen kjøres nøyaktig én gang for hver -count, slik at kostnadskrevende oppsetts- og ryddetrinn kun kjøres én gang.
  • Funksjonsparameterne og resultatene fortsetter å eksistere, noe som hindrer kompilatoren fra å optimalisere hele løkkekroppen.

Forbedrede finalizere

Ny funksjon runtime.AddCleanup er en avslutningsmekanisme som er mer fleksibel, mer effektiv og mindre feilutsatt enn runtime.SetFinalizer. AddCleanup knytter en ryddefunksjon til et objekt som vil kjøre så snart objektet blir utilgjengelig. I motsetning til SetFinalizer kan imidlertid flere oppryddinger knyttes til ett objekt, oppryddinger kan knyttes til interne pekere, oppryddinger forårsaker vanligvis ikke lekkasjer når objektene danner en sirkel, og oppryddinger utsetter ikke frigjøringen av objektet eller objektene som det pekes til. Ny kode bør foretrekke AddCleanup fremfor SetFinalizer.

Ny weak-pakke

Den nye pakken weak tilbyr svake pekere.

Svake pekere er en lavere nivå-primitiv som er tilveiebragt for å lage strukturer som effektivt bruker minnet, slik som svake ordbøker for å kartlegge verdier, kanoniseringsordbøker for hva som helst som ikke dekkes av pakken unique, og ulike typer cacher. For å støtte disse brukstilfellene, gir denne utgivelsen også runtime.AddCleanup og maphash.Comparable.

Den nye pakken crypto/mlkem

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

ML-KEM er en post-kvantum nøkkelutvekslingsmekanisme, tidligere kjent som Kyber og spesifisert i FIPS 203.

De nye pakkene crypto/hkdf, crypto/pbkdf2 og crypto/sha3

Den nye pakken crypto/hkdf implementerer en HMAC-basert nøkkelutdatafunksjon 'Extract-and-Expand' HKDF, som definert i RFC 5869.

Den nye pakken crypto/pbkdf2 implementerer en passordbasert nøkkelutdatafunksjon PBKDF2, som definert i RFC 8018.

Den nye pakken crypto/sha3 implementerer hashfunksjonen SHA-3 og SHAKE samt cSHAKE-funksjoner for utvidet utdata, som definert i FIPS 202.

Alle tre pakkene er basert på eksisterende pakker fra golang.org/x/crypto/....

Compliance med FIPS 140-3

Denne utgivelsen inkluderer et nytt sett med mekanismer for å sikre compliance med FIPS 140-3.

Go kryptografimodul er et sett med interne pakker i standardbiblioteket som brukes for å implementere godkjente FIPS 140-3 algoritmer. Applikasjoner krever ingen endringer for å bruke Go kryptografimodul for godkjente algoritmer.

Den nye miljøvariabelen GOFIPS140 kan brukes til å velge versjonen av Go kryptografimodul som skal brukes under bygget. Den nye innstilling av GODEBUG fips140 kan brukes til å aktivere FIPS 140-3-modus under kjøring.

Go 1.24 inkluderer Go kryptografimodul versjon v1.0.0, som for tiden testes med en akkreditert CMVP-lab.

Den nye eksperimentelle pakken testing/synctest

Den nye eksperimentelle pakken testing/synctest gir støtte for testing av parallell kode.

  • kan synctest.Run kjører en gruppe gorutiner i en isolert 'boble'. I boblen opererer funksjonene til pakken time på falske klokker.
  • Functions synctest.Wait venter på at alle gorutiner skal bli blokkert i den nåværende boblen.

Detaljer kan sees i dokumentasjonen til pakken.

Pakken synctest er eksperimentell og må aktiveres ved å sette GOEXPERIMENT=synctest. API-et til pakken kan endres i fremtidige utgivelser. I #67434 kan du se flere detaljer og gi tilbakemelding.

Mindre endringer i biblioteket

archive

Implementasjoner (*Writer.AddFS) i archive/zip og archive/tar skriver nå header for kataloger for tomme kataloger.

bytes

Pakken bytes legger til flere funksjoner som arbeider med iteratorer:

  • Lines returnerer en iterator for linjer delt av nye linjer i et byteslice.
  • SplitSeq returnerer en iterator over alle delene av en byte-slice delt av en separator.
  • SplitAfterSeq returnerer en iterator over delene av en byte-slice delt etter hver forekomst av separatoren.
  • FieldsSeq returnerer en iterator over delene av en byte-slice rundt sekvenser av mellomrom, som definert unicode.IsSpace
  • FieldsFuncSeq returnerer en iterator over delene av en byte-slice rundt sekvenser av Unicode-kodinger som oppfyller predikatet.

crypto/aes

Verdien som returneres NewCipher implementerer ikke lenger metodene NewCTR, NewGCM, NewCBCEncrypter og NewCBCDecrypter. Disse metodene var ikke dokumentert og var ikke tilgjengelige på alle arkitekturer. Nå har verdien Block må sendes direkte til de aktuelle funksjonene crypto/cipher. Per nå sjekker crypto/cipher fortsatt disse metodene mot Block-verdier, selv om de ikke lenger støttes av standardbiblioteket.

crypto/cipher

Ny funksjon NewGCMWithRandomNonce returnerer AEAD, som implementerer AES-GCM ved å generere et tilfeldig engangsnummer under Seal og legge det til begynnelsen av den krypterte teksten.

Implementering Stream, returneres NewCTR ved bruk sammen med crypto/aes er nå flere ganger raskere på amd64 og arm64.

NewOFB, NewCFBEncrypter og NewCFBDecrypter er nå erklært foreldet. OFB og CFB-modusene er ikke autentiserte, noe som i alminnelighet muliggjør aktive angrep til å manipulere og gjenskape klar tekst. Applikasjoner anbefales å bruke AEAD i stedet. Hvis ikke-autentisert modus Stream er nødvendig, kan NewCTR brukes i stedet.

crypto/ecdsa

PrivateKey.Sign lager nå en deterministisk signatur i samsvar med RFC 6979, hvis kilden til tilfeldighet er nil.

crypto/md5

Verdien som returneres md5.New, implementerer nå også grensesnittet encoding.BinaryAppender.

crypto/rand

kan Read garanterer nå fravær av feil. Hvis Read møter en feil under lesing Reader, programmet avsluttes uten mulighet for gjenopprettelse. Vær oppmerksom på at den standard Readeren er dokumentert til alltid å fungere, så denne endringen bør bare påvirke de programmene som overstyrer Reader-variabelen. Ett unntak er Linux-kjerner før versjon 3.17, der standard Reader fortsatt åpner /dev/urandom og kan mislykkes.

På Linux 6.11 og senere bruker Reader nå systemanropet getrandom via vDSO. Dette er flere ganger raskere, vanligvis for små lesinger.

På OpenBSD bruker Reader nå arc4random_buf(3).

Ny funksjon Text nå kan generere kryptografisk sikre tilfeldige tekststrenger.

crypto/rsa

GenerateKey nå returnerer en feil hvis en nøkkel med mindre enn 1024 biter blir etterspurt. Alle metodene Sign, Verify, Encrypt og Decrypt returnerer nå en feil hvis de brukes med en nøkkelstørrelse på mindre enn 1024 biter. Slike nøkler er usikre og bør ikke brukes. Innstilling av GODEBUG rsa1024min=0 gjenoppretter gammel atferd, men Go-utviklere anbefaler å gjøre dette bare ved behov og kun i tester, for eksempel ved å legge til linjen //go:debug rsa1024min=0 i testfilen. Ny eksempel GenerateKey gir en brukervennlig standard 2024-bits testnøkkel.

Det er nå trygt og mer effektivt å påkalle PrivateKey.Precompute til PrivateKey.Validate. Precompute er nå raskere når det er delvis fylt PrecomputedValues, for eksempel ved uttrekking av nøkkelen fra JSON.

Pakken avviser nå flere feilaktige nøkler, selv når Validate ikke blir kalt, og GenerateKey kan nå returnere nye feil for defekte tilfeldighetskilder. Feltene Primes og Precomputed strukturer PrivateKey brukes nå og valideres selv når noen verdier mangler. Det er også gjort endringer i crypto/x509 angående analyse og uttrekking av RSA-nøkler, beskrevet nedenfor.

SignPKCS1v15 og VerifyPKCS1v15 støtter nå SHA-512/224, SHA-512/256 og SHA-3.

GenerateKey bruker nå en litt annen metode for å generere den private eksponenten (Carmichael-funksjonen i stedet for Eulers funksjon). Sjeldne applikasjoner som gjenkaper nøkler kun fra primtall utenfra, kan gi forskjellige, men kompatible resultater.

Operasjoner med offentlige og private nøkler er nå opptil to ganger raskere på wasm.

crypto/sha*

crypto/subtle

Ny funksjon WithDataIndependentTiming lar bruker en funksjon med aktive funksjoner spesifik for arkitektur som garanterer uforanderlighet av visse instruksjoner i forhold til tid for dataverdier. Dette kan brukes for å sikre at koden, laget for å fungere på konstant tid, ikke er optimalisert av prosessorens nivå-funksjoner slik at den fungerte i variabel tid. For tiden bruker WithDataIndependentTiming biten PSTATE.DIT på arm64 og gjør ingenting på alle andre arkitekturer. Innstilling av GODEBUG dataindependenttiming=1 aktiverer DIT-modus for hele Go-programmet.

Utdata XORBytes må være helt overlappende eller ikke i det hele tatt med innspill. Tidligere atferd var udefinert i motsatt fall, mens nå vil XORBytes panikk.

crypto/tls

TLS-serveren støtter nå Encrypted Client Hello (ECH). Denne funksjonen kan aktiveres ved å fylle ut feltet Config.EncryptedClientHelloKeys.

Ny post-kvant nøkkelutveksling mekanisme X25519MLKEM768 støttes nå og er aktivert som standard når Config.CurvePreferences er nil. Innstilling av GODEBUG tlsmlkem=0 returnerer standard.

Støtte for eksperimentell nøkkelutveksling X25519Kyber768Draft00 har blitt fjernet.

Nøkkelutvekslingsrekkefølgen håndteres nå helt av crypto/tls-pakken. Rekkefølgen Config.CurvePreferences blir nå ignorert, og innholdet brukes kun for å bestemme hvilke nøkkelutvekslinger som skal inkluderes når feltet er fylt ut.

Nytt felt ClientHelloInfo.Extensions oppregner listen over ID-er for utvidelser mottatt i Client Hello-meldingen. Dette kan være nyttig for å ta TLS-klientavtrykk.

crypto/x509

Innstilling av GODEBUG x509sha1 har blitt fjernet. Certficicate.Verify støtter ikke lenger signaturer basert på SHA-1.

OID implementerer nå grensesnittene encoding.BinaryAppender og encoding.TextAppender.

Standard felt for sertifikatpolitikker har blitt endret fra Certificate.PolicyIdentifiers En funksjon har blitt Certificate.Policies. Ved parsing av sertifikater vil begge feltene bli fylt ut, men når sertifikatpolitikker opprettes vil de bli hentet fra feltet Certificate.Policies i stedet for Certificate.PolicyIdentifiers. Denne endringen kan tilbakeføres med innstillingen GODEBUG x509usepolicies=0.

CreateCertificate vil nå generere et serienummer ved å bruke en RFC 5280-kompatibel metode når det sendes som et felt Certificate.SerialNumber nil, i stedet for å feile.

Certificate.Verify støtter nå validering av politikk som definert i RFC 5280 og RFC 9618. Det nye feltet VerifyOptions.CertificatePolicies kan settes til et akseptabelt sett av politikk OIDs. Kun kuns sertifikater med gyldige politikker vil bli returnert fra Certificate.Verify.

MarshalPKCS8PrivateKey nå returnerer en feil i stedet for å hente en feil RSA-nøkkel. (MarshalPKCS1PrivateKey har ikke en feilmelding, og oppførselen ved feil nøkkel fortsetter å være usikker.)

ParsePKCS1PrivateKey og ParsePKCS8PrivateKey bruker nå og validerer de kodede CRT-verdiene, så de kan avvise feil RSA-nøkler som tidligere ble akseptert. Bruken av GODEBUG-innstillingen x509rsacrt=0 går tilbake til å omberegne CRT-verdiene.

debug/elf

Pakken debug/elf legger til støtte for behandling av dynamiske versjonsikoner i ELF-filer (Executable and Linkable Format). Den nye metoden File.DynamicVersions returnerer en liste over dynamiske versjoner definert i ELF-filen. Den nye metoden File.DynamicVersionNeeds returnerer en liste over dynamiske versjoner som kreves av denne ELF-filen, definert i andre ELF-objekter. Endelig, de nye feltene Symbol.HasVersion og Symbol.VersionIndex indikerer versjonen til symbolet.

encoding

To nye grensesnitt TextAppender og BinaryAppender ble introdusert for å legge til tekstlig eller binært representasjon av objektet til en byte-slice. Disse grensesnittene tilbyr samme funksjonalitet som TextMarshaler og BinaryMarshaler, men i stedet for å allokere en ny slice hver gang, legger de til dataene direkte i den eksisterende sliced. Disse grensesnittene er nå implementert av standardbibliotektypene som allerede implementerer TextMarshaler og/eller BinaryMarshaler.

encoding/json

Når man bygger strukturfeltet med det nye omitzero-alternativet, vil feltet bli utelatt hvis verdien er null. Hvis feltets type har metoden IsZero() bool, vil den bli brukt til å avgjøre om verdien er null. Ellers vil verdien være null hvis den er null for sin type. omitzero-feltet er renere og mindre feilutsatt enn omitempty, når intensjonen er å utelate nullverdier. Spesielt, i motsetning til omitempty, utelater omitzero null time.Time verdier, noe som ofte er en kilde til problemer.

Hvis både omitempty og omitzero er angitt, vil feltet bli utelatt hvis verdien er tom eller null (eller begge deler om gangen).

UnmarshalTypeError.Field inkluderer nå innebygde strukturer for å gi mer detaljerte feilmeldinger.

go/types

Alle datatyper go/types, som avslører sekvenser av par metoder som Len() int og At(int) T, har nå også metoder som returnerer iteratorer, noe som forenkler koden som dette:

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 som aldri aktiveres og alltid kasserer sin utdata.

Nivå og LevelVar implementerer nå grensesnittet encoding.TextAppender.

math/*

net

ListenCondig bruker nå MPTCP som standard på systemer der dette støttes (foresatt bare Linux).

IP implementerer nå grensesnittet encoding.TextAppender.

net/http

Begrensningen har endret seg Transport for mottatte informasjonssvar 1xx som svar på forespørselen. Tidligere stoppet det forespørselen og returnerte en feil etter å ha mottatt mer enn 5 1xx-svar. Nå returnerer det en feil kun hvis den totale størrelsen på alle 1xx-svarene overskrider konfigurasjonsinnstillingen Transport.MaxResponseHeaderBytes.

I tillegg, når forespørselen har et hook for sporing net/http/httptrace.ClientTrace.Got1xxResponse, er det nå ingen begrensning på det totale antallet 1xx-svar. Hook Got1xxResponse kan returnere en feil for å stoppe forespørselen.

Transport og Server har nå et HTTP2-felt som tillater konfigurasjon av HTTP/2-protokollinnstillinger.

Nye felt Server.Protocols og Transport.Protocols gir en enkel måte å konfigurere hvilke protokoller serveren eller klienten bruker.

Server og klient kan konfigureres til å støtte ukrypterte HTTP/2-tilkoblinger.

Når Server.Protocols inneholder UnencrypterHTTP2, serveren vil akseptere HTTP/2-tilkoblinger på ukrypterte porter. Serveren kan akseptere både HTTP/1 og ukryptert HTTP/2 på samme port.

Når Transport.Protocols inneholder UnencryptedHTTP2 og ikke HTTP1, transporten vil bruke ukryptert HTTP/2 for adresser http://. Hvis transporten er konfigurert for å bruke både HTTP/1 og ukryptert HTTP/2, vil den bruke HTTP/1.

Støtte for ukryptert HTTP/2 bruker "HTTP/2 med forhåndskunnskap" (RFC 9113, seksjon 3.3). Den foreldede headeren "Upgrade: h2c" støttes ikke.

net/netip

Addr, AddrPort og Prefix implementerer nå grensesnitt encoding.BinaryAppender og encoding.TextAppender.

net/url

URL implementerer nå også grensesnittet encoding.BinaryAppender.

os/user

I Windows Current kan nå brukes i Windows Nano Server. Implementeringen ble oppdatert for å unngå å bruke funksjoner fra NetApi32-biblioteket, som mangler i Nano Server.

I Windows Current, Lookup og LookupId støtter nå følgende innebygde brukerkontoer:

  • NT AUTHORITYSYSTEM
  • NT AUTHORITYLOCAL SERVICE
  • NT AUTHORITYNETWORK SERVICE

I Windows Current har blitt betydelig forbedret når den nåværende brukeren er koblet til et tregt domene, noe som er vanlig for mange bedriftsbrukere. Den nye ytelsen til implementeringen er nå i millisekunder, sammenlignet med den forrige implementeringen som kunne ta flere sekunder, til og med minutter, å fullføre.

I Windows Current returnerer nå eieren av prosessen når den nåværende tråden utgir seg for å være en annen bruker. Tidligere returnerte dette en feil.

regexp

Regexp implementerer nå grensesnittet encoding.TextAdapter.

runtime

kan GOROOT er nå erklært foreldet. I den nye koden bør man heller bruke systemstien for å finne binary "go", og bruke go env GOROOT for å bestemme GOROOT.

strings

Pakken strings legger til flere funksjoner for å arbeide med iteratører:

  • Lines returnerer en iterator over linjeskilt strenger i strengen.
  • SplitSeq returnerer en iterator over alle delstrenger i strengen, delt med separatoren.
  • SplitAfterSeq returnerer en iterator over delstrenger i strengen, delt etter hver forekomst av separatoren.
  • FieldsSeq returnerer en iterator over delstrenger i strengen rundt sekvenser av mellomrom, som definertunicode.IsSpace
  • FieldsFuncSeq returnerer en iterator over delstrenger i strengen rundt sekvenser av Unicode-kodepunkter som tilfredsstiller predikatet.

sync

Implementering sync.Map har blitt endret for å forbedre ytelsen, spesielt for endringer i ordboken. For eksempel er det mindre sannsynlig at konkurrerende endringer i ikke-overlappende sett skjer i store ordbøker, og det er ikke lenger nødvendig med oppbyggingstid for å oppnå lav konkurransebelastning i ordboken.

Hvis du møter noen problemer, sett GOEXPERIMENT=nosynchashtriemap under byggingen for å gå tilbake til den gamle implementeringen, og vennligst fyll ut problemdialogen.

testing

Nye metoder T.Context og B.Context returnerer konteksten, som blir avbrutt etter at testen er fullført og før testens opprydningsfunksjoner kjøres.

Nye metoder T.Chdir og B.Chdir kan brukes til å endre arbeidskatalogen i løpet av testen eller benchmark.

text/template

Malene støtter nå range-over-func og range-over-int.

time

Tid implementerer nå grensesnittene encoding.BinaryAppender og encoding.TextAppender.

Ports

Linux

Som nevnt annonsert i utgivelsesnotatene for Go 1.23, krever Go 1.24 Linux-kjerne versjon 3.2 eller nyere.

Darwin

Go 1.24 er den siste utgivelsen som vil fungere på macOS 11 Big Sur. Go 1.25 vil kreve macOS 12 Monterey eller nyere.

WebAssembly

Kompilatordirektivet go:wasmexport er lagt til i Go-programmer for å eksportere funksjoner til WebAssembly-verten.

I WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) støtter Go 1.24 kompilering av Go-programmet som reactor/library ved å angi byggeflagget -buildmode=c-shared.

Flere typer er nå tillatt som argument- eller resultatstype for go:wasmimport-funksjoner. Spesielt, bool, string, uintptr og pekere til bestemte typer er tillatt (detaljer kan ses i dokumentasjonen), sammen med 32-bits og 64-bits heltallstyper og flyttall, samt unsafe.Pointer, som allerede er tillatt. Disse typene er også tillatt som argument- eller resultatstyper for go:wasmexport-funksjoner.

Støttefiler for WebAssembly er flyttet til lib/wasm fra misc/wasm.

Den opprinnelige minnestørrelsen er betydelig redusert, spesielt for små WebAssembly-programmer.

Windows

32-bits Windows/ARM-porten (GOOS=windows GOARCH=arm) er merket som ødelagt. Detaljer i #70705

Kilde: linux.org.ru

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster