Gå 1.24

Gå 1.24

En ny utgivelse av Go-språket, versjon 1.24, kommer seks måneder etter Gå 1.23. De fleste endringene er i implementeringen av verktøykjeden, runtime og biblioteker. Som alltid gir utgivelsen løfte om kompatibilitet Go 1. Språkdesignerne forventer at nesten alle Go-programmer vil fortsette å kompilere og kjøre som før.

Endringer i språket

Go 1.24 støtter nå fullt ut generiske typealiaser: et typealias kan parameteriseres som en deklarert type. Detaljer i språkspesifikasjoner. Foreløpig kan denne funksjonen deaktiveres ved å sette GOEXPERIMENT=noaliastypeparams; Alternativet aliastypeparams vil imidlertid bli fjernet i Go 1.25.

Verktøy

Gå kommando

Go-moduler kan nå spore kjørbare avhengigheter ved å bruke verktøydirektivet i go.mod. Dette fjerner behovet for den forrige løsningen med å legge til verktøy som tomme importer i en fil som vanligvis kalles "tools.go". Go tool-kommandoen kan nå kjøre disse verktøyene i tillegg til verktøyene som følger med Go. Mer informasjon finner du på dokumentasjon.

Det nye -tool-flagget for go get fører til at verktøydirektiver legges til den gjeldende modulen for de spesifiserte pakkene i tillegg til å legge til krever-direktiver.

Ny metamønsterverktøy refererer til alle verktøyene i gjeldende modul. Dette kan brukes til å oppdatere dem alle via go get-verktøyet, eller for å installere dem i GOBIN-katalogen via go install-verktøyet.

Kjørbare filer opprettet via go run og den nye go-verktøyatferden, er nå bufret i Go build-bufferen. Dette gjør gjentatte lanseringer mulig på grunn av økt cache. #69290.

Go build og go install-kommandoene godtar nå -json-flagget, som rapporterer byggeutdata og feil som strukturert JSON-utdata på standardutdata. Formatdetaljer kan sees i go help buildjson.

Videre, go test -json rapporterer nå utdata- og byggefeil i JSON, blandet inn med testresultatet JSON. De kan skilles ut med de nye handlingstypene, men hvis de forårsaker problemer i testintegrasjonssystemet, kan du falle tilbake til tekstutgangen til bygget via GODEBUG oppsett gotestjsonbuildtext=1.

Den nye GOAUTH-miljøvariabelen gir en fleksibel måte å autorisere private modultrekk. Du kan se detaljer i go help goauth.

Go build-kommandoen er nå installert versjon av hovedmodulen i den kompilerte binære filen, basert på en tag og/eller en versjonskontroll-commit. +dirty-suffikset vil bli lagt til hvis det er ukommitterte endringer. -buildvcs=false-flagget kan brukes til å utelate versjonskontrollinformasjon fra binærfilen.

ny GODEBUG oppsett verktøykjedespor=1 kan nå brukes til å spore verktøykjedevalgsprosessen i go-kommandoen.

Cgo

Cgo støtter nye merknader for C-funksjoner for å forbedre kjøretidsytelsen. #cgo noescape cFunctionName forteller kompilatoren at minnet som sendes til C-funksjonen cFunctionName ikke er escaped. #cgo nocallback cFunctionName forteller kompilatoren at C-funksjonen cFunctionName ikke kaller tilbake noen Go-funksjoner. Mer informasjon finner du på cgo dokumentasjon.

Cgo nekter for øyeblikket å kompilere kall til en C-funksjon som har flere inkompatible erklæringer. 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 ugyldig anropssekvens f(0). Nytt i denne utgivelsen er forbedret gjenkjenning av denne feiltilstanden når inkompatible erklæringer vises i forskjellige filer. #67699.

Objdump

Objdump-verktøyet støtter nå demontering på 64-bits LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) og S390X (GOARCH=s390x).

Fett

Den nye testanalysatoren rapporterer vanlige feil i test-, fuzzer-, benchmark- og eksempelerklæringer i testsuiter, for eksempel feilutformede navn, ugyldige signaturer eller eksempler som dokumenterer ikke-eksisterende identifikatorer. Noen av disse feilene kan føre til at tester mislykkes.

Den eksisterende printf-parseren rapporterer nå diagnostikk for kall av formen fmt.Printf(s), der s er en ikke-konstant formatstreng uten andre argumenter. Slike anrop er nesten alltid en feil, siden verdien av s kan inneholde %-tegnet; bruk fmt.Print i stedet. 60529. Denne sjekken har en tendens til å finne ting i eksisterende kode, og brukes derfor kun når språkversjonen (som spesifisert av go-direktivet til go.mod-filen eller `//go:build`-kommentarene) er minst Go 1.24, for å unngå å forårsake lange integrasjonspauser ved oppgradering til Go 1.24-verktøykjeden.

Den eksisterende buildtag-analysatoren rapporterer nå diagnostikk når det er en feil buildtag byggebegrensning for eldre versjon Gå inn i //go:build-direktivet. For eksempel refererer //go:build go1.23.1 til en punktutgivelse; bruk i stedet //go:build go1.23. #64127.

Den eksisterende copylock-analysatoren rapporterer nå en diagnostikk når en variabel er deklarert i en trippel "for"-løkke, for eksempel for i := iter(); gjort(i); i = neste(i) { … }, inneholder sync.Locker, for eksempel sync.Mutex. Gå 1.22 endret oppførselen til slike løkker for å lage en ny variabel for hver iterasjon, kopiere verdiene fra forrige iterasjon; Denne kopieringen er ikke trygg for låser. #66387.

GOCACHEPROG

Den interne cmd/go-binær- og testbufringsmekanismen kan nå implementeres av underordnede prosesser som implementerer en JSON-protokoll mellom cmd/go-verktøyet og underordnet prosess navngitt av miljøvariabelen GOCACHEPROG. Tidligere var det for GOEXPERIMENT. Detaljer om protokollen kan sees i dokumentasjon.

Tidspunkt for ferdigstillelse

Flere ytelsesforbedringer ved kjøretid reduserte CPU-overhead med 2-3 % i gjennomsnitt på tvers av et sett med representative benchmarks. Resultatene kan variere avhengig av applikasjonen. Disse forbedringene inkluderer en ny innebygd kartimplementering basert på Svenske tabeller, mer effektiv tildeling av minne for små objekter, og en ny intern kjøretidsimplementering av mutex.

Den nye innebygde kartimplementeringen og den nye interne kjøretidsmutexen kan deaktiveres ved å sette henholdsvis GOEXPERIMENT=noswissmap og GOEXPERIMENT=nospinbitmutex på byggetidspunktet.

Kompilator

Kompilatoren forbød allerede å definere nye metoder med mottakertyper som ble generert av cgo, men det var mulig å omgå denne begrensningen via et typealias. Go 1.24 rapporterer nå alltid en feil hvis mottakeren angir en cgo-generert type, enten direkte eller indirekte (via et typealias).

Linker

Linkeren genererer nå en GNU-byggidentifikator (ELF-oppføring NT_GNU_BUILD_ID) på ELF-plattformer og en UUID (Mach-O-lastkommando LC_UUID) på macOS som standard. Bygg-ID-en eller UUID-en er avledet fra Go-bygg-ID-en. Dette kan slås av med -B none linkerflagget, eller overstyres med -B 0xNNNN linkerflagget med en brukerspesifisert heksadesimal verdi.

Forfremmelse

Som det står i Gå til 1.22 versjonsnotater, Go 1.24 krever nå Go 1.22.6 eller nyere for å være installert. Utviklerne forventer at Go 1.26 vil kreve en punktutgivelse av Go 1.24 eller senere for å bli rullet ut.

Standard bibliotek

Katalogbegrenset filsystemtilgang

Ny type os.root Gir muligheten til å utføre filsystemoperasjoner innenfor en bestemt katalog.

Funksjon os.OpenRoot åpner katalogen og kommer tilbake os.root. Metoder på os.root operere i den katalogen og tillater ikke stier å referere til steder utenfor katalogen, inkludert de som følger symbolske lenker utenfor katalogen. Metodene på os.Root gjenspeiler de fleste filsystemoperasjonene som er tilgjengelige i os-pakken, inkludert f.eks. os.Root.Open, os.Root.Create, os.Root.Mkdir и os.Root.Stat.

Ny benchmark-funksjon

Benchmarks kan nå bruke en raskere, mindre feilutsatt metode testing.B.Loop å iterere over en benchmark som for b.Loop() { … } i stedet for de typiske sløyfestrukturene som involverer bN som for område bN. Dette gir to betydelige fordeler:

  • Benchmark-funksjonen utføres nøyaktig én gang per telling, så de dyre oppsetts- og oppryddingstrinnene utføres kun én gang.
  • Funksjonsanropsparametrene og resultatene lever videre, og hindrer kompilatoren i å optimalisere loopkroppen fullstendig.

Forbedrede sluttbehandlere

Ny funksjon runtime.AddCleanup er en fullføringsmekanisme som er mer fleksibel, mer effektiv og mindre utsatt for feil enn runtime.SetFinalizer. AddCleanup knytter en oppryddingsfunksjon til et objekt som skal kjøres så snart objektet blir utilgjengelig. Imidlertid, i motsetning til SetFinalizer, kan flere oppryddinger festes til et enkelt objekt, oppryddinger kan festes til interne pekere, oppryddinger forårsaker vanligvis ikke lekkasjer når objekter danner en syklus, og oppryddinger forsinker ikke deallokering av objektet eller objektene det peker på. Ny kode bør foretrekke AddCleanup fremfor SetFinalizer.

Ny svak pakke

Ny pakke svak gir svake pekepinner.

Svake pekere er en primitiv på lavt nivå for å lage minneeffektive strukturer som svake ordbøker for kartlegging av verdier, kanoniseringsordbøker for alt som ikke dekkes av en pakke. unik, og ulike typer cacher. For å støtte disse brukstilfellene gir denne utgivelsen også runtime.AddCleanup и maphash.Sammenlignbar.

Ny krypto/mlkem-pakke

Ny pakke krypto/mlkem implementerer ML-KEM-768 og ML-KEM-1024.

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

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

Ny pakke krypto/hkdf implementerer den HMAC-baserte "Extract-and-Expand" nøkkelavledningsfunksjonen HKDF som definert i RFC 5869.

Ny pakke krypto/pbkdf2 implementerer den passordbaserte nøkkelavledningsfunksjonen PBKDF2 som definert i RFC 8018.

Ny pakke krypto/sha3 implementerer SHA-3-hash-funksjonen og SHAKE- og cSHAKE-utvidbare utgangsfunksjoner som definert i FIPS 202.

Alle tre pakkene er basert på de eksisterende golang.org/x/crypto/…-pakkene.

FIPS 140-3-samsvar

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

Go-kryptomodulen er et sett med interne standard bibliotekpakker som transparent brukes til å implementere FIPS 140-3-godkjente algoritmer. Applikasjoner krever ikke endringer for å bruke Go-kryptomodulen for godkjente algoritmer.

Den nye miljøvariabelen GOFIPS140 kan brukes til å velge versjonen av Go-kryptomodulen som skal brukes i en build. Ny GODEBUG oppsett fips140 kan brukes til å aktivere FIPS 140-3-modus under kjøring.

Go 1.24 inkluderer Go kryptomodul v1.0.0, som for tiden testes med et CMVP-akkreditert laboratorium.

Ny eksperimentell pakketesting/synctest

Ny eksperimentell pakke testing/synctest Gir støtte for testing av samtidig kode.

  • Funksjon synctest.run kjører en gruppe goroutiner i en isolert "boble". I boblen til pakken funksjon tid operere på falske klokker.
  • funksjoner synctest.wait vent til alle goroutiner er blokkert i den gjeldende boblen.

Detaljer finner du i pakkedokumentasjonen.

Synctest-pakken er eksperimentell og må aktiveres ved å sette GOEXPERIMENT=synctest. Pakke-API-en kan endres i fremtidige utgivelser. I #67434 Du kan se flere detaljer og gi tilbakemelding.

Mindre endringer i biblioteket

arkiv~~POS=TRUNC

Implementeringene (*Writer.AddFS) i archive/zip og archive/tar skriver nå katalogoverskriften for en tom katalog.

bytes

pakke bytes legger til flere funksjoner som fungerer med iteratorer:

  • Linjer Returnerer en iterator over linjeseparerte strenger i et bytestykke.
  • SplitSeq returnerer en iterator over alle understykker av et bytestykke atskilt med en skilletegn.
  • SplitAfterSeq returnerer en iterator over underdelene til en byte-del, delt opp etter hver forekomst av separatoren.
  • FieldsSeq returnerer en iterator over understykker av en byte skive rundt sekvenser av mellomromstegn, som definert unicode.IsSpace
  • FieldsFuncSeq returnerer en iterator over understykker av et bytestykke rundt sekvenser av Unicode-kodepunkter som tilfredsstiller et predikat.

krypto/aes

Returverdi NewChipher implementerer ikke lenger metodene NewCTR, NewGCM, NewCBCEncrypter og NewCBCDecrypter. Disse metodene var udokumenterte og ikke tilgjengelige på alle arkitekturer. Nå meningen Blokker må sendes direkte til de aktuelle funksjonene krypto/siffer. For øyeblikket sjekker krypto/siffer fortsatt disse metodene på blokkverdier, selv om de ikke lenger støttes av standardbiblioteket.

krypto/siffer

Ny funksjon NewGCMWithRandomNonce returnerer FREM, som implementerer AES-GCM ved å generere en tilfeldig nonce under Seal og sette den foran chifferteksten.

implementering Strøm, returnerte NyCTR når det brukes med krypto/aes nå flere ganger raskere på amd64 og arm64.

NewOFB, NewCFBEncrypter и NewCFBDecrypter er nå erklært foreldet. OFB- og CFB-moduser er uautentiserte, noe som vanligvis lar aktive angrep manipulere og gjenopprette klartekst. Applikasjoner anbefales å bruke FREM til gjengjeld. Hvis uautentisert modus Strøm nødvendig, kan brukes NyCTR til gjengjeld.

krypto/ecdsa

PrivateKey.Sign skaper nå en deterministisk signatur iht RFC 6979, hvis tilfeldighetskilden er null.

krypto/md5

Returverdi md5.ny, implementerer nå også grensesnittet encoding.binaryappender.

krypto/rand

Funksjon Lese garanterer nå ingen feil. Hvis Les støter på en feil under lesing Reader, vil programmet avsluttes permanent. Merk at standard Reader er dokumentert å alltid fungere vellykket, så denne endringen bør bare påvirke programmer som overstyrer Reader-variabelen. Ett unntak er Linux-kjerner før 3.17, hvor standardleseren fortsatt åpner /dev/urandom og kan mislykkes.

På Linux 6.11 og nyere bruker Reader nå det tilfeldige systemanropet via vDSO. Dette er flere ganger raskere, vanligvis for små avlesninger.

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

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

krypto/rsa

Generer nøkkel returnerer nå en feil hvis en nøkkellengde på mindre enn 1024 biter er forespurt. Alle metoder for signering, verifisering, kryptering og dekryptering returnerer nå en feilmelding hvis de brukes med en nøkkelstørrelse på mindre enn 1024 biter. Slike nøkler er usikre og bør ikke brukes. Setter opp GODEBUG rsa1024min=0 gjenoppretter den gamle virkemåten, men Go-utviklerne anbefaler å gjøre dette kun når det er nødvendig og kun i tester, for eksempel ved å legge til linjen //go:debug rsa1024min=0 i testfilen. Ny eksempel GenerateKey gir en enkel å bruke standard 2024-bits testnøkkel.

Det er nå tryggere og mer effektivt å ringe PrivateKey.Precompute til PrivateKey.Validate. Precompute er nå raskere i nærvær av delvis fylt Forhåndsberegnet verdier, for eksempel når du trekker ut en nøkkel fra JSON.

Pakken avviser nå flere ugyldige nøkler selv når Validate ikke kalles, og Generer nøkkel kan nå returnere nye feil for ødelagte tilfeldighetskilder. Felter Primes и Forhåndsberegnet strukturen Privat blir nå brukt og validert selv når noen verdier mangler. Det er også endringer i crypto/x509 for å analysere og trekke ut RSA-nøkler, beskrevet nedenfor.

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

Generer nøkkel bruker nå en litt annen metode for å generere den private eksponenten (Carmichael-funksjon i stedet for Euler-funksjon). Sjeldne applikasjoner som eksternt regenererer nøkler fra bare primtall kan gi forskjellige, men kompatible resultater.

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

krypto/sha*

krypto/subtil

Ny funksjon WithDataIndependentTiming lar brukeren utføre en funksjon med arkitekturspesifikke funksjoner aktivert som sikrer at visse instruksjoner ikke endres i forhold til tidspunktet for dataverdien. Dette kan brukes til å sikre at kode skrevet for å kjøre i konstant tid ikke har blitt optimalisert av funksjoner på prosessornivå slik at den kjører i variabel tid. For øyeblikket bruker WithDataIndependentTiming PSTATE.DIT-biten på arm64 og gjør ingenting på alle andre arkitekturer. Setter opp GODEBUG dataindependenttiming=1 aktiverer DIT-modus for hele Go-programmet.

Utgang XORBytes må overlappe helt eller ikke i det hele tatt med inngangen. Tidligere var oppførselen udefinert ellers, mens XORBytes nå vil få panikk.

krypto/tls

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

En ny post-kvantenøkkelutvekslingsmekanisme X25519MLKEM768 nå støttet og aktivert som standard når Config.CurvePreferences er null. Setter opp GODEBUG tlsmlkem=0 returnerer standard.

Støtte for den eksperimentelle X25519Kyber768Draft00-nøkkelutvekslingen er fjernet.

Nøkkelutvekslingsordren håndteres nå helt av crypto/tls-pakken. Bestille Config.CurvePreferences ignoreres nå, og innholdet brukes kun til å bestemme hvilke nøkkelutvekslinger som skal inkluderes når feltet fylles ut.

Nytt felt ClientHelloInfo.Extensions Viser listen over utvidelsesidentifikatorer mottatt i Client Hello-meldingen. Dette kan være nyttig for fingeravtrykk TLS-klienter.

krypto/x509

Setter opp GODEBUG x509sha1 er fjernet. Sertifisering.Bekreft støtter ikke lenger SHA-1-baserte signaturer.

OID implementerer nå grensesnitt encoding.binaryappender и encoding.TextAppender.

Standard sertifikatpolicyfelt er endret fra Certificate.PolicyIdentifiersSertifikat.Retningslinjer. Når du analyserer sertifikater, vil begge feltene fylles ut, men når du oppretter en sertifikatpolicy, vil de bli hentet fra Certificate.Policies-feltet i stedet for Certificate.PolicyIdentifiers. Denne endringen kan tilbakeføres. GODEBUG oppsett x509usepolicies=0.

Opprett sertifikat vil nå generere et serienummer ved å bruke en RFC 5280-kompatibel metode når et malfelt sendes Certificate.SerialNumber null, i stedet for å krasje.

Certificate.Bekreft støtter nå policyvalidering som definert i RFC 5280 og RFC 9618. Nytt felt VerifyOptions.CertificatePolicies kan settes til et akseptabelt sett med retningslinjer OIDer. Kun sertifikatkjeder med gyldige policygrafer vil bli returnert fra Certificate.Bekreft.

MarshalPKCS8PrivateKey returnerer nå en feil i stedet for å hente en ugyldig RSA-nøkkel. (MarshalPKCS1PrivateKey har ingen feilretur, og oppførselen når ugyldige nøkler oppgis forblir udefinert.)

ParsePKCS1PrivateKey и ParsePKCS8PrivateKey nå bruker og validerer kodede CRT-verdier, så kan avvise ugyldige RSA-nøkler som tidligere ble akseptert. Bruk GODEBUG-innstillinger x509rsacrt=0 går tilbake til omberegning av CRT-verdier.

debug/elf

pakke debug/elf Legger til støtte for håndtering av symbolversjoner i dynamiske ELF-filer (Executable and Linkable Format). Ny metode File.DynamicVersions Returnerer en liste over dynamiske versjoner definert i en ELF-fil. Ny metode File.DynamicVersionNeeds Returnerer en liste over dynamiske versjoner som kreves av denne ELF-filen som er definert i andre ELF-objekter. Endelig nye felt Symbol.HasVersion и Symbol.VersionIndex angi versjonen av symbolet.

koding

To nye grensesnitt TextAppender и BinaryAppender ble introdusert for å legge til en tekst eller binær representasjon av et objekt til et bytestykke. Disse grensesnittene gir samme funksjonalitet som TekstMarshaler и Binær Marshaler, men i stedet for å tildele en ny skive hver gang, legger de til data direkte til en eksisterende skive. Disse grensesnittene er for tiden implementert av standard bibliotektyper som allerede implementerer TextMarshaler og/eller BinaryMarshaler.

koding/json

Ved bygging vil et strukturfelt med det nye omitzero-alternativet i strukturfelt-taggen utelates hvis verdien er null. Hvis felttypen har en IsZero() bool-metode, vil den bli brukt til å bestemme om verdien er null. Ellers vil verdien være null hvis den nullverdi for typen. Omitzero-feltkoden er renere og mindre utsatt for feil enn utelatelse når hensikten er å utelate nullverdier. Spesielt, i motsetning til utelatelse, utelater omitzero nuller tid.tid verdier, som er en vanlig kilde til problemer.

Hvis både utelatelse og utelatelse er spesifisert, vil feltet utelates hvis verdien er tom eller null (eller begge deler).

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

gå/typer

Alle go/types datastrukturer som eksponerer sekvenser av metodepar, som Len() int og At(int) T, har nå også metoder som returnerer iteratorer, noe som tillater enklere kode som dette:

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

På denne:

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

Metoder: Interface.EmbeddedTypes Interface.ExplicitMethods Grensesnitt. Metoder MethodSet.Methods Navngitt. Metoder Omfang.Barn Struktur.Felter Tuple.Variables TypeList.Types TypeParamList.TypeParams Fagforeningsvilkår

hasj/*

logg/slog

Ny DiscardHandler er en behandler som aldri er aktivert og alltid forkaster utdata.

Nivå и LevelVar implementer nå grensesnittet encoding.TextAppender.

matematikk/*

nett

Lytt Condig bruker nå MPTCP som standard på systemer der det støttes (foreløpig bare Linux).

IP implementerer nå grensesnittet encoding.TextAppender.

net/http

Begrensningen er endret Transport til de mottatte 1xx informasjonssvarene som svar på forespørselen. Tidligere ville dette stoppe forespørselen og returnere en feilmelding etter å ha mottatt mer enn 5 1xx-svar. Dette returnerer nå bare en feil hvis den totale størrelsen på alle 1xx-svarene overskrider konfigurasjonsinnstillingen Transport.MaxResponseHeaderBytes.

Også når en forespørsel har en sporingskrok net/http/httptrace.ClientTrace.Got1xxResponse, nå er det ingen begrensning på det totale antallet svar 1xx. Got1xxResponse-kroken kan returnere en feil for å stoppe forespørselen.

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

Nye felt Server.Protocols и Transport.Protokoller gi en enkel måte å konfigurere hvilke HTTP-protokoller serveren eller klienten bruker.

Serveren og klienten kan konfigureres til å støtte ukrypterte HTTP/2-tilkoblinger.

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

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

Støtte for ukryptert HTTP/2 bruker "HTTP/2 med Forward-Learning" (RFC 9113, avsnitt 3.3). Den utdaterte overskriften "Upgrade: h2c" støttes ikke.

nett/nettip

adr, AdrPort и Prefix implementer nå grensesnitt encoding.binaryappender и encoding.TextAppender.

nett/url

URL implementerer nå også grensesnittet encoding.binaryappender.

os/bruker

På Windows Gjeldende kan nå brukes i Windows Nano Server. Implementeringen er oppdatert for å unngå bruk av funksjoner fra NetApi32-biblioteket, som mangler fra Nano Server.

På Windows Gjeldende, Oppslag и LookupId støtter nå følgende innebygde brukertjenestekontoer:

  • NT MYNDIGHETSSYSTEM
  • NT MYNDIGHET LOKAL TJENESTE
  • NT MYNDIGHETSNITTSTJENESTE

På Windows Gjeldende ble betydelig raskere når den nåværende brukeren kobles til et sakte domene, noe som er et vanlig tilfelle for mange bedriftsbrukere. Ytelsen til den nye implementeringen er nå i størrelsesorden millisekunder, sammenlignet med den forrige implementeringen, som kan ta flere sekunder, til og med minutter, å fullføre.

På Windows Gjeldende returnerer nå prosesseierbrukeren når den gjeldende tråden etterligner en annen bruker. Tidligere returnerte dette en feil.

regexp

Regexp implementerer nå grensesnittet encoding.TextAdapter.

runtime

Funksjon GOROOT er nå avviklet. I nyere miljøer bør du foretrekke å bruke systembanen for å bestemme "go"-binæren, og bruke go env GOROOT for å bestemme GOROOT.

strenger

pakke strenger legger til flere funksjoner for arbeid med iteratorer:

  • Linjer Returnerer en iterator over linjeseparerte linjer i en streng.
  • SplitSeq returnerer en iterator over alle understrenger i en streng atskilt med en separator.
  • SplitAfterSeq returnerer en iterator over delstrenger av en streng, delt opp etter hver forekomst av separatoren.
  • FieldsSeq returnerer en iterator over understrenger av en streng rundt sekvenser av mellomromstegn, som definertunicode.IsSpace
  • FieldsFuncSeq Returnerer en iterator over understrenger av streng rundt sekvenser av Unicode-kodepunkter som tilfredsstiller et predikat.

synkronisere

implementering sync.map har blitt endret for å forbedre ytelsen, spesielt for ordbokendringer. For eksempel er usammenhengende sett endringskonflikt mindre sannsynlig på store ordbøker, og det krever ikke lenger oppbyggingstid for å oppnå lav belastning på ordboken.

Hvis du støter på problemer, still inn GOEXPERIMENT=nosynchashtriemap under build for å gå tilbake til den gamle implementeringen og vennligst fyll ut problemskjemaet.

testing

Nye metoder T.Kontekst и B.Kontekst returnere en kontekst som forkastes etter at testen er fullført og før testoppryddingsfunksjonene utføres.

Nye metoder T.Chdir и B.Chdir kan brukes til å endre arbeidskatalogen for varigheten av en test eller benchmark.

tekst/mal

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

tid

Tid implementerer nå grensesnitt encoding.binaryappender и encoding.TextAppender.

Havner

Linux

Som det var kunngjort I følge versjonsnotatene for Go 1.23 krever Go 1.24 Linux-kjerneversjon 3.2 eller nyere.

Darwin

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

WebAssembly

Go:wasmexport-kompilatordirektivet er lagt til Go-programmer for å eksportere funksjoner til WebAssembly-verten.

I WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm), støtter Go 1.24 å bygge et Go-program som reaktor/bibliotek ved å spesifisere build-flagget -buildmode=c-shared.

Flere typer er nå tillatt som argument- eller resultattyper for go:wasmimport-funksjoner. Spesielt er bool, string, uintptr og pekere til visse typer tillatt (se detaljer i dokumentasjon), sammen med 32-biters og 64-biters heltalls- og flyttallstyper, og unsafe.Pointer, som allerede er tillatt. Disse typene er også tillatt som argument- eller resultattyper for go:wasmexport-funksjoner.

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

Det innledende minneavtrykket er betydelig redusert, spesielt for små WebAssembly-applikasjoner.

Windows

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

Kilde: linux.org.ru

Legg til en kommentar