Go 1.24

Go 1.24

Nova verzija jezika Go, verzija 1.24, izlazi šest meseci nakon Go 1.23. Većina promena se odnosi na implementaciju alatnog lanca, runtime-a i biblioteka. Kao i obično, izdanje donosi obećanje o kompatibilnosti Go 1. Programeri jezika očekuju da će gotovo svi Go programi nastaviti da se kompajliraju i rade kao i do sada.

Promene u jeziku

Go 1.24 sada potpuno podržava generičke alias tipove: alias tipa može biti parametizovan kao deklarisani tip. Detalji su u specifikaciji jezika. Iako se mogućnost može isključiti postavljanjem GOEXPERIMENT=noaliastypeparams; međutim, opcija aliastypeparams biće uklonjena u Go 1.25.

Orodja

Komanda go

Moduli go sada mogu pratiti izvršne zavisnosti koristeći direktivu tool u go.mod. Ovo eliminiše potrebu za ranijim rešenjem dodavanja alata kao praznih uvoza u datoteku, obično nazvanu “tools.go”. Komanda go tool sada može pokretati ove alate pored alata koji dolaze s Go-om. Više informacija može se naći u dokumenti.

Nova zastavica -tool za go get dovodi do dodavanja direktive alata u trenutni modul za navedene pakete pored dodavanja direktiva zahteva.

Nova meta obrazac alat odnosi se na sve alate u trenutnom modulu. Može se koristiti za ažuriranje svih njih preko go get tool ili za instaliranje u vašu GOBIN direktorijum preko go install tool.

Izvršni fajlovi kreirani preko go run i novo ponašanje go tool sada se keširaju u Go-ovom kešu gradnje. Ovo poboljšava ponovljene pokrete zahvaljujući povećanom kešu. #69290.

Komande go build i go install sada prihvataju zastavicu -json, koja izveštava izlaz i greške gradnje kao strukturirani izlaz JSON u standardnom izlazu. Detalje formata možete videti u go help buildjson.

Osim toga, go test -json sada izveštava izlaz i greške gradnje u JSON-u, pomešano s JSON-om rezultata testiranja. Mogu se razlikovati po novim tipovima akcije, ali ako izazivaju probleme u sistemu integracije testova, možete se vratiti na tekstualni izlaz gradnje preko podešavanja GODEBUG gotestjsonbuildtext=1.

Nova promenljiva okruženja GOAUTH pruža fleksibilan način za autorizaciju privatnih povlačenja modula. Detalje možete videti u go help goauth.

Komanda go build sada instalira verziju glavnog modula в скомпилированном бинарнике, основываясь на теге и/или коммите системы контроля версии. Суффикс +dirty будет добавлен при наличии незакоммиченных изменений. Можно использовать флаг -buildvcs=false для того, чтобы опустить информацию контроля версии из бинарника.

Nova настройка GODEBUG toolchaintrace=1 теперь может быть использована для отслеживания процесса выбора тулчейна в команде go.

Cgo

Cgo поддерживает новые аннотации для функций C для улучшения производительности времени выполнения. #cgo noescape cFunctionName говорит компилятору, что переданная в функцию C cFunctionName память не ускользает. #cgo nocallback cFunctionName говорит компилятору, что функция C cFunctionName обратно не вызывает никаких функций Go. Большую информацию можно увидеть в документации cgo.

Cgo на данный момент отказывается компилирован вызовы С функции, которая имеет несколько несовместимых объявлений. Например, если f объявлен как одновременно void f(int) и void f(double), cgo сообщит ошибку вместо возможной генерации неправильной последовательности вызова f(0). Новым в этом релизе является улучшенное обнаружение этого условия ошибки, когда несовместимые объявления проявляются в разных файлах. #67699.

Objdump

Инструмент objdump теперь поддерживает дизассемблирование на 64-битном LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) и S390X (GOARCH=s390x).

Vet

Новый анализатор tests сообщает распространённые ошибки в объявлениях тестов, фаззеров, бенчмарков и примеров в тестовых пакетах, такие как неправильно сформированные имена, неверные сигнатуры или примеры, которые документируют несуществующие идентификаторы. Некоторые из этих ошибок могут привести к невыполнению тестов.

Существующий анализатор printf теперь сообщает диагностику вызовов формы fmt.Printf(s), где s — строка неконстантного формата, без других аргументов. Такие вызовы почти всегда являются ошибкой, поскольку значение s может содержать символ %; взамен используйте fmt.Print. 60529. Эта проверка имеет тенденцию делать находки в существующем коде, и поэтому применяется только когда версия языка (как указано директивой go файла go.mod или комментариями `//go:build) по крайне мере Go 1.24, чтобы избежать возникновения сбоев продолжительной интеграции при обновлении на тулчейн Go 1.24.

Obstoječi buildtag analizator sada javlja dijagnostiku kada postoji greška u ograničenju starije verzije Go u direktivi //go:build. Na primer, //go:build go1.23.1 odnosi se na tačno izdanje; umesto toga koristite //go:build go1.23. #64127.

Obstojeći copylock analizator sada javlja dijagnostiku kada promenljiva deklarisana u trojnoj "for" petlji, kao što je for i := iter(); done(i); i = next(i) { … }, sadrži sync.Locker, kao što je sync.Mutex. Go 1.22 izmenio je ponašanje takvih petlji na kreiranje nove promenljive za svaku iteraciju, kopirajući vrednosti iz prethodne iteracije; to kopiranje nije sigurno za lokove. #66387.

GOCACHEPROG

Interni binarni fajl cmd/go i mehanizam keširanja testova sada mogu biti implementirani podprocesima koji implementiraju JSON protokol između alata cmd/go i podprocesa nazvanog promenljiva okruženja GOCACHEPROG. Pre toga to je bila GOEXPERIMENT. Detalje protokola možete videti u dokumenti.

Vreme izvođenja

Nekoliko poboljšanja performansi u runtime-u smanjilo je troškove CPU-a u proseku za 2-3% u skupini reprezentativnih benčmarkova. Rezultati se mogu razlikovati u zavisnosti od aplikacije. Ova poboljšanja uključuju novu ugrađenu implementaciju mape zasnovanu na Švedskim Tablama, efikasnijem dodeljivanju memorije za male objekte i novoj unutrašnjoj runtime implementaciji mutexa.

Nova ugrađena implementacija mape i nova unutrašnja runtime mutex mogu se onemogućiti postavkama GOEXPERIMENT=noswissmap i GOEXPERIMENT=nospinbitmutex tokom građenja.

Kompajler

Kompajler je već zabranio određivanje novih metoda sa tipovima primaoca koji su generisani cgo, ali je bilo moguće zaobići ovo ograničenje putem alias tipa. Go 1.24 sada uvek javlja grešku ako primalac označava generisani cgo tip, direktno ili indirektno (putem alias tipa).

Linker

Linker sada generiše GNU identifikator izgradnje (zapisa ELF NT_GNU_BUILD_ID) na ELF platformama i UUID (Mach-O LC_UUID) na macOS-u po difoltu. Identifikator izgradnje ili UUID se proizvodi iz identifikatora izgradnje Go. Ovo se može isključiti linker flagom -B none, ili predefinisati linker flagom -B 0xNNNN sa korisnički definisanom heksadecimalnom vrednošću.

Osvježavanje

Kao što je navedeno u beleškama o izdanju Go 1.22, Go 1.24 zdaj zahteva Go 1.22.6 ali novejšo različico za izvajanje. Razvijalci pričakujejo, da bo Go 1.26 za izvajanje zahteval točno različico Go 1.24 ali novejšo.

Standardna knjižnica

Dostop do datotečnega sistema, omejen na mapo

Nov tip os.Root omogoča izvajanje operacij datotečnega sistema v okviru določene mape.

Funkcija os.OpenRoot odpre mapo in vrne os.Root. Metode na os.Root delujejo v tej mapi in ne dovolijo, da poti kažejo na lokacije izven mape, vključno s tistimi, ki sledijo simboličnim povezavam izven mape. Metode na os.Root odražajo večino operacij datotečnega sistema, ki so na voljo v paketu os, vključno z na primer, os.Root.Open, os.Root.Create, os.Root.Mkdir in os.Root.Stat.

Nova funkcija benchmarka

Benchmarked zdaj lahko uporablja hitrejšo in manj nagnjeno k napakam metodo testing.B.Loop za izvajanje iteracij benchmarka, kot je for b.Loop() { … } namesto običajnih zanke strukture z vključevanjem b.N, kot je for range b.N. To ponuja dve pomembni prednosti:

  • Benchmark funkcija se izvede natančno enkrat za vsak -count, tako da drage nastavitvene in čistilne korake izvajamo samo enkrat.
  • Parameteri funkcijskega klica in rezultati ostajajo v življenju, kar preprečuje kompilatorju popolno optimizacijo telesa zanke.

Izboljšani finalizatorji

Nova funkcija runtime.AddCleanup je mehanizem za zaključevanje, ki je bolj fleksibilen, učinkovitejši in manj nagnjen k napakam kot runtime.SetFinalizer. AddCleanup pritrdi funkcijo čiščenja na objekt, ki se bo zagnala, ko objekt postane nedostopen. Vendar pa, za razliko od SetFinalizer, lahko več čiščenj pripnemo enemu objektu, čiščenja se lahko pripnejo na notranje kazalce, čiščenja običajno ne povzročajo puščanja, ko objekti tvorijo cikel, in čiščenja ne odložijo osvoboditve objekta ali objektov, na katere ta kaže. Nov koda bi morala raje izbrati AddCleanup pred SetFinalizer.

Nov paket weak

Nov paket weak omogoča šibke kazalce.

Šibki kazalci so nizkonivojski primitiv, ki se zagotavlja za ustvarjanje struktur, ki učinkovito uporabljajo pomnilnik, kot so šibki slovarji za povezovanje vrednosti, slovarji kanonizacije za karkoli, kar ni pokrito z paketom unique, and various cache types. To support these use cases, this release also provides runtime.AddCleanup in maphash.Comparable.

New crypto/mlkem package

Nov paket crypto/mlkem implements ML-KEM-768 and ML-KEM-1024.

ML-KEM is a post-quantum key exchange mechanism, previously known as Kyber and specified in FIPS 203.

New packages crypto/hkdf, crypto/pbkdf2, and crypto/sha3

Nov paket crypto/hkdf implements the HMAC-based key derivation function “Extract-and-Expand” HKDF, as defined in RFC 5869.

Nov paket crypto/pbkdf2 implements the password-based key derivation function PBKDF2, as defined in RFC 8018.

Nov paket crypto/sha3 implements the SHA-3 hash function and SHAKE and cSHAKE extendable-output functions, as defined in FIPS 202.

All three packages are based on existing packages from golang.org/x/crypto/…

FIPS 140-3 compliance

This release includes a new set of mechanisms for ensuring FIPS 140-3 compliance..

Go's cryptographic module is a set of internal packages from the standard library that are transparently used to implement approved FIPS 140-3 algorithms. Applications require no changes to use Go's cryptographic module for approved algorithms.

A new environment variable GOFIPS140 can be used to select the version of Go's cryptographic module to use in the build. The new настройка GODEBUG fips140 can be used to enable FIPS 140-3 mode at runtime.

Go 1.24 includes the Go cryptographic module version v1.0.0, which is currently being tested with an accredited CMVP lab.

New experimental package testing/synctest

new experimental package testing/synctest provides support for testing concurrent code.

  • Funkcija synctest.Run runs a group of goroutines in an isolated ‘bubble’. In the bubble, functions from the package time operate on fake clocks.
  • Functions synctest.Wait waits for all goroutines to block in the current bubble.

Details can be seen in the package documentation.

The synctest package is experimental and must be enabled by setting GOEXPERIMENT=synctest. The package API may change in future releases. In #67434 more details can be viewed and feedback provided.

Minor changes in the library

archive

Implementations (*Writer.AddFS) in archive/zip and archive/tar now write a directory header for an empty directory.

bytes

Package bytes adds several functions that work with iterators:

  • Lines vrne iterator za ločene vrstice prek novih vrstic v sličici bajtov.
  • SplitSeq vrne iterator za vse podsezname sličice bajtov, ločene z ločilom.
  • SplitAfterSeq vrne iterator za podsezname sličice bajtov, ločene po vsakem pojavu ločila.
  • FieldsSeq vrne iterator za podsezname sličice bajtov okoli zaporedij znakov vrzeli, kot je določeno unicode.IsSpace
  • FieldsFuncSeq vrne iterator za podsezname sličice bajtov okoli zaporedij kodnih točk unicode, ki ustrezajo predikatu.

crypto/aes

Vrednost, vrnjena NewChipher več ne implementira metod NewCTR, NewGCM, NewCBCEncrypter in NewCBCDecrypter. Te metode so bile nedokumentirane in niso bile na voljo na vseh arhitekturah. Sedaj vrednost Block mora biti posredovana neposredno ustreznim funkcijam crypto/cipher. Trenutno crypto/cipher še vedno preverja te metode na vrednostih Block, celo če jih standardna knjižnica več ne podpira.

crypto/cipher

Nova funkcija NewGCMWithRandomNonce vračajo AEAD, ki implementira AES-GCM, ustvarjajući naključni enkratni številko med Seal in dodajući ga na začetek šifriranega besedila.

Implementacija Stream, vrnjena NewCTR z uporabo s crypto/aes sedaj večkrat hitrejši na amd64 in arm64.

NewOFB, NewCFBEncrypter in NewCFBDecrypter so zdaj razglašeni za zastarele. Načini OFB in CFB niso avtenticirani, kar na splošno dopušča aktivnim napadom manipulacijo in obnavljanje odprtega besedila. Priporočljivo je, da aplikacije uporabljajo AEAD namesto tega. Če je neavtenticirani način Stream potreben, lahko uporabi NewCTR namesto tega.

crypto/ecdsa

PrivateKey.Sign zdaj ustvarja deterministično podpisovanje v skladu z RFC 6979, če je vir naključnosti nil.

crypto/md5

Vrednost, vrnjena md5.New, zdaj tudi implementira vmesnik encoding.BinaryAppender.

crypto/rand

Funkcija Читать zdaj zagotavlja odsotnost neuspehov. Če Read naleti na napako med branjem Reader, program se nepreklicno konča. Upoštevajte, da je privzeti Reader dokumentirano, da vedno deluje uspešno, zato bo ta sprememba vplivala le na tiste programe, ki prepisujejo spremenljivko Reader. Edina izjema so jedra Linuxa pred različico 3.17, kjer privzeti Reader še vedno odpirajo /dev/urandom in lahko odpove.

Na Linux 6.11 i kasneje Reader zdaj uporablja sistemski poziv getrandom preko vDSO. To je večkrat hitreje, običajno za majhne branja.

Na OpenBSD Reader zdaj uporablja arc4random_buf(3).

Nova funkcija Tekst zdaj lahko generira kriptografsko varne naključne besedilne niz.

crypto/rsa

GenerateKey zdaj vrne napako, če je zahtevan ključ dolžine manj kot 1024 bitov. Vse metode Sign, Verify, Encrypt in Decrypt zdaj vračajo napako, če so uporabljene z ključem velikosti manj kot 1024 bitov. Takšni ključi so nevarni in jih ne smete uporabljati. Nastavitev GODEBUG rsa1024min=0 obnovi staro vedenje, vendar razvijalci Go priporočajo, da to delate le po potrebi in samo v testih, na primer z dodajanjem vrstice //go:debug rsa1024min=0 v testno datoteko. Nov primer GenerateKey zagotavlja enostavno uporabni standardni 2024-bitni testni ključ.

Zdaj je varno in bolj učinkovito klicati PrivateKey.Precompute do PrivateKey.Validate. Precompute je zdaj hitrejši v prisotnosti delno napolnjenih PrecomputedValues, na primer pri izvleku ključa iz JSON.

Paketu zdaj zavrne več nepravilnih ključev, tudi ko Validate ni klican, in GenerateKey zdaj lahko vrne nove napake za pokvarjene vire naključnosti. Polja Primes in Precomputed struktur PrivateKey zdaj se uporabljajo in validirajo, tudi ko nekateri vrednosti manjkajo. Tudi spremembe so bile narejene v crypto/x509 glede razčlenjevanja in pridobivanja RSA ključev, opisane spodaj.

SignPKCS1v15 in VerifyPKCS1v15 zdaj podpirata SHA-512/224, SHA-512/256 in SHA-3.

GenerateKey zdaj uporablja nekoliko drugačno metodo za generacijo privatne eksponente (Karmichlova funkcija namesto Eulerjeve funkcije). Redke aplikacije, ki zunaj ustvarjajo ključe le iz praštevil, lahko ustvarijo različne, vendar združljive rezultate.

Operacije nad javnimi in privatnimi ključi so zdaj do dvakrat hitrejše na wasm.

crypto/sha*

crypto/subtle

Nova funkcija WithDataIndependentTiming omogoča uporabniku izvajanje funkcije z vključenimi funkcijami, specifičnimi za arhitekturo, ki zagotavljajo nespremenljivost določenih navodil glede na čas vrednosti podatkov. To se lahko uporabi za zagotovitev, da koda, ustvarjena za delo v konstantnem času, ni bila optimizirana s funkcijami procesorskega nivoja na način, da deluje v spremenljivem času. Trenutno WithDataIndependentTiming uporablja bit PSTATE.DIT na arm64 in ne počne ničesar na vseh drugih arhitekturah. Nastavitev GODEBUG dataindependenttiming=1 aktivira način DIT za celotno Go aplikacijo.

Izlaz XORBytes mora biti v celoti ali nikakor prekrivno z vhodom. Prejšnje vedenje je bilo neodvisno v nasprotnem primeru, zdaj pa bo XORBytes sprožil paniko.

crypto/tls

TLS strežnik zdaj podpira Encrypted Client Hello (ECH). To možnost lahko omogočite z izpolnjevanjem polja Config.EncryptedClientHelloKeys.

Nov post-kvantni mehanizem izmenjave ključev X25519MLKEM768 zdaj je podprt in vključen privzeto, ko Config.CurvePreferences je nil. Nastavitev GODEBUG tlsmlkem=0 vrne privzeto.

Podpora za eksperimentalno izmenjavo ključev X25519Kyber768Draft00 je bila odstranjena.

Zaporedje izmenjave ključev se zdaj obravnava v celoti s paketom crypto/tls. Zaporedje Config.CurvePreferences zdaj je ignorirano, vsebina pa se uporablja le za določitev, katere izmenjave ključev vključiti, ko je polje izpolnjeno.

Novo polje ClientHelloInfo.Extensions našteje seznam identifikatorjev razširitev, prejetih v sporočilu Client Hello. To je lahko koristno za sledenje prstnim odtisom TLS strank.

crypto/x509

Nastavitev GODEBUG x509sha1 je bil odstranjen. Certficicate.Verify več ne podpira podpisov, temelječih na SHA-1.

OID zdaj implementira vmesnike encoding.BinaryAppender in encoding.TextAppender.

Privzeto polje politik certifikatov je bilo spremenjeno iz Certificate.PolicyIdentifiers na Certificate.Policies. Pri razčlenjevanju certifikatov bosta obe polji izpolnjeni, vendar se bodo pri ustvarjanju politike certifikatov upoštevala iz polja Certificate.Policies namesto Certificate.PolicyIdentifiers. Ta sprememba se lahko vrne z nastavitvijo GODEBUG x509usepolicies=0.

CreateCertificate zdaj bo generiral serijsko številko z uporabo metode, skladne z RFC 5280, pri posredovanju predloge s poljem Certificate.SerialNumber nil, namesto, da bi se ustavil.

Certificate.Verify zdaj podpira potrjevanje politike, kot je določeno v RFC 5280 in RFC 9618. Novo polje VerifyOptions.CertificatePolicies lahko je nastavljeno na sprejemljiv nabor politik OIDs. Samo verige certifikatov z veljavnimi politikami bodo vrnjenje iz Certificate.Verify.

MarshalPKCS8PrivateKey sedaj vrne napako namesto nepravilne ekstrakcije RSA ključa. (MarshalPKCS1PrivateKey ni vrnil napake in njegovo vedenje pri nepravilnih ključih ostaja nedoločeno.)

ParsePKCS1PrivateKey in ParsePKCS8PrivateKey sedaj uporablja in validira kodirane vrednosti CRT, zato lahko zavrnejo nepravilne RSA ključe, ki so bili prej sprejeti. Uporaba nastavitve GODEBUG x509rsacrt=0 se vrne na ponovno izračunavanje vrednosti CRT.

debug/elf

Package debug/elf dodaja podporo za obdelavo dinamičnih različic simbolov v dinamičnih ELF datotekah (Executable and Linkable Format). Nova metoda File.DynamicVersions vrne seznam dinamičnih različic, opredeljenih v ELF datoteki. Nova metoda File.DynamicVersionNeeds vrne seznam dinamičnih različic, potrebnih za to ELF datoteko, ki so opredeljene v drugih ELF objektih. Nazadnje, nova polja Symbol.HasVersion in Symbol.VersionIndex nakazujejo različico simbola.

encoding

Dva nova vmesnika TextAppender in BinaryAppender sta bila uvedena za dodajanje besedilne ali binarne predstavitve objekta v rezino bajtov. Ta vmesnika zagotavljata enako funkcionalnost kot TextMarshaler in BinaryMarshaler, vendar namesto da bi vsakokrat dodelila novo rezino, dodajata podatke neposredno v obstoječo rezino. Ta vmesnika sta zdaj implementirana z vrstami standardne knjižnice, ki že implementirajo TextMarshaler in/ali BinaryMarshaler.

encoding/json

Pri gradnji polja strukture z novo možnostjo omitzero bo polje v strukturi izpuščeno, če je njegova vrednost nič. Če ima tip polja metodo IsZero() bool, se bo ta uporabila za določitev, ali je vrednost nič. Drugače bo vrednost nič, če je ničelna vrednost za njegov tip. Oznaka polja omitzero je bolj čista in manj nagnjena k napakam kot omitempty, kadar je namen izpustiti ničelne vrednosti. Zlasti, v nasprotju z omitempty, omitzero izpušča ničelne time.Time vrednosti, kar je pogost vir težav.

Če sta oboje omitempty in omitzero navedena, bo polje izpuščeno, če je vrednost prazna ali ničelna (ali takoj skupaj).

UnmarshalTypeError.Field sedaj vključuje vgrajene strukture za zagotavljanje bolj podrobnih sporočil o napakah.

go/types

Vse strukture podatkov go/types, ki razkrivajo zaporedja pare metod, kot sta Len() int in At(int) T, zdaj vključujejo tudi metode, ki vračajo iteracije, kar poenostavi kodo, podobno temu:

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

Za to:

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

Metode: 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

Nova DiscardHandler je obdelovalec, ki nikoli ni vključen in vedno zavrže svoj izhod.

Level in LevelVar zdaj uresničujejo vmesnik encoding.TextAppender.

math/*

net

ListenCondig zdaj privzeto uporablja MPTCP na sistemih, kjer je to podprto (zaenkrat samo Linux).

IP zdaj uresničuje vmesnik encoding.TextAppender.

net/http

Spremenila se je omejitev Transport na prejeti informacijski odziv 1xx kot odgovor na zahtevo. Prej je to ustavilo zahtevo in vrnilo napako po prejemu več kot 5 odzivov 1xx. Zdaj to vrne napako le, če je skupna velikost vseh odzivov 1xx večja od nastavitve konfiguracije Transport.MaxResponseHeaderBytes.

Poleg tega, ko ima zahteva priključek za sledenje net/http/httptrace.ClientTrace.Got1xxResponse, zdaj ni omejitve na skupno število odzivov 1xx. Priključek Got1xxResponse lahko vrne napako za ustavitev zahteve.

Transport in Strežnik zdaj imajo polje HTTP2, ki omogoča konfiguracijo nastavitev protokola HTTP/2.

Nova polja Server.Protocols in Transport.Protocols ponujajo preprost način za konfiguracijo, katere protokole HTTP strežnik ali odjemalec uporablja.

Strežnik in odjemalec lahko postavita podporo za nešifrirane povezave HTTP/2.

Ko Server.Protocols vsebuje UnencrypterHTTP2; strežnik bo sprejel povezave HTTP/2 na nešifriranih vratih. Strežnik lahko sprejme tako HTTP/1 kot nešifrirani HTTP/2 na istem pristanišču.

Ko Transport.Protocols vsebuje UnencryptedHTTP2 in ne vsebuje HTTP1, transport bo uporabljal nešifriran HTTP/2 za naslove http://. Če je transport konfiguriran za uporabo tako HTTP/1 kot nezakryptiranega HTTP/2, bo uporabljal HTTP/1.

Podpora nezakryptiranemu HTTP/2 uporablja 'HTTP/2 s predznanjem' (RFC 9113, oddelek 3.3). Zastareli naslov 'Upgrade: h2c' ni podprt.

net/netip

Naslov, Naslov in vrata in Prefiks sedaj implementirajo vmesnike encoding.BinaryAppender in encoding.TextAppender.

net/url

URL zdaj prav tako implementira vmesnik encoding.BinaryAppender.

os/user

V sistemu Windows Trenutni sedaj lahko uporabimo v Windows Nano Serverju. Implementacija je bila posodobljena, da se izogne uporabi funkcij iz knjižnice NetApi32, ki v Nano Serverju ni na voljo.

V sistemu Windows Trenutni, Iskanje in IskId sedaj podpirajo naslednje vgrajene uporabniške storitvene račune:

  • NT AUTHORITYSYSTEM
  • NT AUTHORITYLOCAL SERVICE
  • NT AUTHORITYNETWORK SERVICE

V sistemu Windows Trenutni je bila znatno hitrejša, ko je trenutni uporabnik povezan z počasnim domenom, kar je pogost primer za mnoge podjetniške uporabnike. Nova hitrost implementacije je zdaj v okviru milisekund, v primerjavi s prejšnjo, ki je lahko trajala več sekund, celo minut, do zaključka.

V sistemu Windows Trenutni sedaj vrača uporabnika lastnika procesa, ko trenutni niti predstavlja drugega uporabnika. Prej je to vračalo napako.

regexp

Regexp zdaj uresničuje vmesnik encoding.TextAdapter.

runtime

Funkcija GOROOT je zdaj razglašena za zastarelo. V novem kodeksu se priporoča uporabo sistemske poti za določitev binarne datoteke 'go', ter uporabo 'go env GOROOT' za določitev GOROOT.

strings

Package strings doda več funkcij za delo z iteratorji:

  • Lines vrača iterator, ki je razdeljen po novih vrsticah v nizu.
  • SplitSeq vrača iterator po vseh podnizih niza, ločenih s separatorjem.
  • SplitAfterSeq vrača iterator po podnizih niza, razdeljenih po vsakem pojavu separatorja.
  • FieldsSeq vrača iterator po podnizih niza okoli zaporedij presledkov, kot je opredeljeno.unicode.IsSpace
  • FieldsFuncSeq vrača iterator po podnizih niza okoli zaporedij kodnih točk unicode, ki izpolnjujejo predikat.

sync

Implementacija sync.Map je bila spremenjena, kar izboljšuje zmogljivost, zlasti pri spremembah slovarja. Na primer, manj verjetno je, da pride do konkurence med spremembami nepovezanih množic v velikih slovarjih, in ni več potrebno časovno obdobje za dosego nizke konkurence pri obremenitvi slovarja.

Če naletite na kakršne koli težave, med gradnjo nastavite GOEXPERIMENT=nosynchashtriemap, da se vrnete na staro implementacijo, in prosim, izpolnite obrazec za težavo.

testing

Novi načini T.Context in B.Context vrne kontekst, ki se prekliče po zaključku testa in pred izvajanjem funkcij za čiščenje testa.

Novi načini T.Chdir in B.Chdir lahko se uporablja za spremembo delovne mape za čas trajanja testa ali merjenja.

text/template

Predloge zdaj podpirajo range-over-func in range-over-int.

time

Vreme zdaj implementira vmesnike encoding.BinaryAppender in encoding.TextAppender.

Ports

Linux

Kot je bilo obveščeno v opombah o izpustu Go 1.23, Go 1.24 zahteva jedro Linuxa različice 3.2 ali novejšo.

Darwin

Go 1.24 je zadnji izid, ki bo deloval na macOS 11 Big Sur. Go 1.25 bo zahteval macOS 12 Monterey ali novejši.

WebAssembly

Direktiva prevajalnika go:wasmexport je bila dodana programom Go za izvoz funkcij v gostitelja WebAssembly.

V WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 podpira sestavljanje programa Go kot reactor/library z navedbo zastavice za sestavljanje -buildmode=c-shared.

Več tipov je zdaj dovoljeno kot tip argumenta ali rezultata za funkcije go:wasmimport. Zlasti so dovoljeni bool, string, uintptr in kazalci na določene tipe (podrobnosti so na voljo v dokumenti), skupaj s 32-bitnimi in 64-bitnimi tipi celih števil in plavajočih števil, ter unsafe.Pointer, ki so že dovoljeni. Ti tipi so prav tako dovoljeni kot tipi argumenta ali rezultata za funkcije go:wasmexport.

Podporne datoteke za WebAssembly so bile premaknjene v lib/wasm iz misc/wasm.

Izvirna velikost pomnilnika je bila znatno zmanjšana, zlasti za majhne aplikacije WebAssembly.

Windows

32-bitna različica za windows/arm (GOOS=windows GOARCH=arm) je bila označena kot pokvarjena. Podrobnosti v #70705

Izvor: linux.org.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster