Novo izdanje jezika Go, verzija 1.24, dolazi šest mjeseci kasnije Idi 1.23. Većina promjena odnosi se na implementaciju lanca alata, vremena izvođenja i biblioteka. Kao i uvijek, izdanje pruža obećanje kompatibilnosti Go 1. Dizajneri jezika očekuju da će se gotovo svi Go programi nastaviti kompilirati i izvoditi kao prije.
Jezične promjene
Go 1.24 sada u potpunosti podržava aliasi generičkog tipa: pseudonim tipa može se parametrizirati kao deklarirani tip. Detalji u jezične specifikacije. Za sada se ova značajka može onemogućiti postavljanjem GOEXPERIMENT=noaliastypeparams; Međutim, opcija aliastypeparams bit će uklonjena u Go 1.25.
Alat
Kreni naredba
Go moduli sada mogu pratiti izvršne ovisnosti pomoću direktive alata u go.mod. Time se uklanja potreba za prethodnim rješenjem dodavanja alata kao praznih uvoza u datoteku koja se obično naziva "tools.go". Naredba alata go sada može pokrenuti ove alate uz alate koji dolaze s Goom. Više informacija možete pronaći na dokumentacija.
Nova zastavica -tool za go get uzrokuje dodavanje direktiva alata u trenutni modul za navedene pakete uz dodavanje direktiva zahtijeva.
Novi alat za meta-uzorak odnosi se na sve alate u trenutnom modulu. Ovo se može koristiti za ažuriranje svih njih putem alata go get ili za njihovo instaliranje u vaš direktorij GOBIN putem alata go install.
Izvršne datoteke stvorene putem go run i novo ponašanje alata go sada se pohranjuju u predmemoriju Go builda. To omogućuje ponovljena pokretanja zbog povećane predmemorije. #69290.
Naredbe go build i go install sada prihvaćaju oznaku -json, koja izvještava o izlazu izgradnje i pogreškama kao strukturiranom JSON izlazu na standardnom izlazu. Pojedinosti o formatu mogu se vidjeti u go help buildjson.
Nadalje, go test -json sada izvještava o greškama izlaza i izrade u JSON-u, pomiješanom s JSON rezultatom testa. Mogu se razlikovati po novim vrstama radnji, ali ako uzrokuju probleme u sustavu integracije testa, možete se vratiti na tekstualni izlaz međuverzije putem Postavljanje GODEBUG-a gotestjsonbuildtext=1.
Nova varijabla okoline GOAUTH pruža fleksibilan način za autorizaciju povlačenja privatnih modula. Detalje možete vidjeti u go help goautu.
Naredba go build sada je instalirana verzija glavnog modula u prevedenom binarnom obliku, na temelju oznake i/ili izvršenja kontrole verzije. Sufiks +dirty bit će dodan ako postoje neizvršene promjene. Oznaka -buildvcs=false može se koristiti za izostavljanje informacija o kontroli verzija iz binarne datoteke.
Novi Postavljanje GODEBUG-a toolchaintrace=1 sada se može koristiti za praćenje procesa odabira lanca alata u naredbi go.
Cgo
Cgo podržava nove bilješke za C funkcije radi poboljšanja performansi vremena izvođenja. #cgo noescape cFunctionName govori kompajleru da memorija proslijeđena C funkciji cFunctionName nije escapedirana. #cgo nocallback cFunctionName govori kompajleru da C funkcija cFunctionName ne poziva nijednu Go funkciju. Više informacija možete pronaći na cgo dokumentacija.
Cgo trenutno odbija prevesti pozive na C funkciju koja ima više nekompatibilnih deklaracija. Na primjer, ako je f deklariran i kao void f(int) i kao void f(double), cgo će prijaviti pogrešku umjesto da eventualno generira nevažeću pozivnu sekvencu f(0). Novo u ovom izdanju je poboljšano otkrivanje ovog stanja pogreške kada se nekompatibilne deklaracije pojavljuju u različitim datotekama. #67699.
Objdump
Alat objdump sada podržava rastavljanje na 64-bitnom LoongArchu (GOARCH=loong64), RISC-V (GOARCH=riscv64) i S390X (GOARCH=s390x).
Veterinar
Novi analizator testova izvještava o uobičajenim pogreškama u deklaracijama testa, fuzzera, benchmarka i primjera u skupovima testova, kao što su pogrešno oblikovana imena, nevažeći potpisi ili primjeri koji dokumentiraju nepostojeće identifikatore. Neke od ovih grešaka mogu uzrokovati neuspjeh testova.
Postojeći printf parser sada izvješćuje o dijagnostici za pozive oblika fmt.Printf(s), gdje je s nekonstantni niz formata bez drugih argumenata. Takvi pozivi su gotovo uvijek pogreška, budući da vrijednost s može sadržavati znak %; umjesto toga koristite fmt.Print. 60529. Ova provjera ima tendenciju pronalaženja stvari u postojećem kodu i stoga se primjenjuje samo kada je jezična verzija (kao što je navedeno u direktivi go datoteke go.mod ili komentarima `//go:build`) barem Go 1.24, kako bi se izbjeglo izazivanje dugih prekida integracije prilikom nadogradnje na lanac alata Go 1.24.
Postojeći analizator buildtag sada javlja dijagnostiku kada postoji netočna buildtag ograničenje izrade starije verzije Idite u direktivu //go:build. Na primjer, //go:build go1.23.1 odnosi se na izdanje točke; umjesto toga koristite //go:build go1.23. #64127.
Postojeći copylock analizator sada javlja dijagnostiku kada je varijabla deklarirana u trostrukoj "for" petlji, kao što je for i := iter(); učinjeno(i); i = next(i) { … }, sadrži sync.Locker, kao što je sync.Mutex. Idi 1.22 promijenio ponašanje takvih petlji kako bi stvorio novu varijablu za svaku iteraciju, kopirajući vrijednosti iz prethodne iteracije; Ovo kopiranje nije sigurno za brave. #66387.
GOCAČEPROG
Interni cmd/go binarni i mehanizam testnog predmemoriranja sada mogu implementirati podređeni procesi koji implementiraju JSON protokol između cmd/go alata i podređenog procesa imenovanog varijablom okruženja GOCACHEPROG. Prethodno je to bilo za GOEXPERIMENT. Detalji protokola mogu se vidjeti u dokumentacija.
Vrijeme završetka
Nekoliko poboljšanja performansi vremena rada smanjilo je opterećenje CPU-a za 2-3% u prosjeku kroz niz reprezentativnih mjerila. Rezultati mogu varirati ovisno o primjeni. Ova poboljšanja uključuju novu ugrađenu implementaciju karte temeljenu na Švedski stolovi, učinkovitiju dodjelu memorije malih objekata i novu internu implementaciju vremena izvođenja muteksa.
Nova ugrađena implementacija mape i novi interni mutex vremena izvođenja mogu se onemogućiti postavljanjem GOEXPERIMENT=noswissmap odnosno GOEXPERIMENT=nospinbitmutex u vrijeme izgradnje.
Sastavljač
Prevodilac je već zabranio definiranje novih metoda s tipovima primatelja koje je generirao cgo, ali bilo je moguće zaobići ovo ograničenje putem aliasa tipa. Go 1.24 sada uvijek javlja pogrešku ako primatelj označava cgo-generirani tip, bilo izravno ili neizravno (preko aliasa tipa).
Povezivač
Linker sada generira GNU ID izgradnje (ELF unos NT_GNU_BUILD_ID) na ELF platformama i UUID (Mach-O naredba za učitavanje LC_UUID) na macOS Prema zadanim postavkama, ID verzije ili UUID izveden je iz ID-a verzije Go. To se može onemogućiti zastavom linkera -B none ili poništiti zastavom linkera -B 0xNNNN s heksadecimalnom vrijednošću koju je odredio korisnik.
Promocija
Kako je navedeno u Napomene o izdanju Go 1.22, Go 1.24 sada zahtijeva instaliranje Go 1.22.6 ili novije verzije. Razvojni programeri očekuju da će Go 1.26 zahtijevati točkasto izdanje Go 1.24 ili novijeg za uvođenje.
Standardna knjižnica
Pristup datotečnom sustavu ograničen na direktorij
Novi tip os.korijen Pruža mogućnost izvođenja operacija datotečnog sustava unutar određenog direktorija.
Funkcija os.OpenRoot otvara imenik i vraća se os.korijen. Metode na os.korijen rade u tom imeniku i ne dopuštaju da se staze odnose na lokacije izvan imenika, uključujući one koje slijede simboličke veze izvan imenika. Metode na os.Root odražavaju većinu operacija datotečnog sustava dostupnih u os paketu, uključujući, na primjer, os.Korijen.Otvori, os.Root.Create, os.Korijen.Mkdir и os.Root.Stat.
Nova referentna značajka
Referentne vrijednosti sada mogu koristiti bržu metodu s manje grešaka testiranje.B.Loop za ponavljanje preko referentne vrijednosti kao što je za b.Loop() { … } umjesto tipičnih struktura petlje koje uključuju bN kao što je za raspon bN Ovo nudi dvije značajne prednosti:
- Funkcija referentne vrijednosti izvršava se točno jednom po broju, tako da se skupi koraci postavljanja i čišćenja izvode samo jednom.
- Parametri i rezultati poziva funkcije žive i dalje, sprječavajući kompajler da potpuno optimizira tijelo petlje.
Poboljšani finalizatori
Nova značajka runtime.AddCleanup je mehanizam završetka koji je fleksibilniji, učinkovitiji i manje sklon pogreškama od vrijeme izvođenja.SetFinalizer. AddCleanup pridružuje funkciju čišćenja objektu koja će se pokrenuti čim objekt postane nedostupan. Međutim, za razliku od SetFinalizera, višestruka čišćenja mogu se pridružiti jednom objektu, čišćenja se mogu pridružiti internim pokazivačima, čišćenja obično ne uzrokuju curenje kada objekti formiraju ciklus, a čišćenja ne odgađaju oslobađanje objekta ili objekata na koje pokazuje. Novi kod trebao bi imati prednost AddCleanup u odnosu na SetFinalizer.
Novo slabo pakovanje
Novi paket slab pruža slabe pokazatelje.
Slabi pokazivači su primitiva niske razine predviđena za stvaranje memorijski učinkovitih struktura kao što su slabi rječnici za mapiranje vrijednosti, rječnici kanonikalizacije za sve što nije pokriveno paketom. jedinstveni, te razne vrste predmemorija. Za podršku ovim slučajevima korištenja, ovo izdanje također nudi runtime.AddCleanup и maphash.Usporediv.
Novi kripto/mlkem paket
Novi paket kripto/mlkem implementira ML-KEM-768 i ML-KEM-1024.
ML-KEM je postkvantni mehanizam za razmjenu ključeva, ranije poznat kao Kyber i specificiran u FIPS 203.
Novi paketi crypto/hkdf, crypto/pbkdf2 i crypto/sha3
Novi paket kripto/hkdf implementira "Extract-and-Expand" temeljenu na HMAC-u funkciju derivacije ključa HKDF kako je definirano u RFC 5869.
Novi paket kripto/pbkdf2 implementira funkciju izvođenja ključa temeljenu na lozinci PBKDF2 kako je definirano u RFC 8018.
Novi paket kripto/sha3 implementira SHA-3 hash funkciju i SHAKE i cSHAKE proširive izlazne funkcije kako je definirano u FIPS 202.
Sva tri paketa temelje se na postojećim golang.org/x/crypto/… paketima.
Sukladnost FIPS 140-3
Ovo izdanje uključuje novi skup mehanizama za osiguravanje sukladnosti sa standardom FIPS 140-3.
Go crypto modul je skup internih standardnih bibliotečkih paketa koji se transparentno koriste za implementaciju odobrenih algoritama FIPS 140-3. Aplikacije ne zahtijevaju promjene za korištenje Go kripto modula za odobrene algoritme.
Nova varijabla okruženja GOFIPS140 može se koristiti za odabir verzije Go kripto modula za korištenje u izgradnji. Novi Postavljanje GODEBUG-a fips140 se može koristiti za omogućavanje FIPS 140-3 načina rada tijekom izvođenja.
Go 1.24 uključuje Go kripto modul v1.0.0, koji se trenutno testira u laboratoriju s akreditacijom CMVP-a.
Novo eksperimentalno testiranje paketa/sinktest
Novi eksperimentalni paket testiranje/sinktest Pruža podršku za testiranje istovremenog koda.
- Funkcija synctest.run pokreće grupu goroutina u izoliranom "mjehuru". U oblačiću funkcije paketa vrijeme rade na lažnim satovima.
- Funkcije sinktest.čekati pričekajte dok se sve goroutine ne blokiraju u trenutnom balončiću.
Detalji se mogu pronaći u dokumentaciji paketa.
Synctest paket je eksperimentalni i mora se omogućiti postavljanjem GOEXPERIMENT=synctest. API paketa može se promijeniti u budućim izdanjima. U #67434 Možete vidjeti više pojedinosti i dati povratne informacije.
Manje izmjene u knjižnici
Arhiva
Implementacije (*Writer.AddFS) u archive/zip i archive/tar sada pišu zaglavlje direktorija za prazan direktorij.
bajtova
paket bajtova dodaje nekoliko funkcija koje rade s iteratorima:
- Linije Vraća iterator preko nizova odvojenih novim retkom u odsječku bajta.
- SplitSeq vraća iterator preko svih pododsječaka odsječka bajta odvojenih separatorom.
- SplitAfterSeq vraća iterator preko pododsječaka odsječka bajta, podijeljen nakon svakog pojavljivanja separatora.
- FieldsSeq vraća iterator preko pododsječaka odsječka bajta oko nizova razmaka, kako je definirano unicode.IsSpace
- FieldsFuncSeq vraća iterator preko pododsječaka odsječka bajta oko nizova Unicode kodnih točaka koje zadovoljavaju predikat.
kripto/aes
Povratna vrijednost NewChipher više ne implementira metode NewCTR, NewGCM, NewCBCEncrypter i NewCBCDecrypter. Ove metode nisu bile dokumentirane i nisu bile dostupne na svim arhitekturama. Sada značenje Blokirati mora se proslijediti izravno odgovarajućim funkcijama kripto/šifra. Trenutno crypto/cipher još uvijek provjerava ove metode na vrijednostima bloka, iako ih standardna biblioteka više ne podržava.
kripto/šifra
Nova značajka NewGCMWithRandomNonce vraća AEAD, koji implementira AES-GCM generiranjem nasumičnog nonce-a tijekom Seal-a i njegovim dodavanjem šifriranom tekstu.
Provedba Potok, vraćeno Novi CTR kada se koristi s kripto/aes sada nekoliko puta brže na amd64 i arm64.
NovoOFB, NewCFBEncrypter и NewCFBDecrypter sada su proglašeni zastarjelima. Načini rada OFB i CFB nisu autentificirani, što općenito dopušta aktivnim napadima manipuliranje i oporavak otvorenog teksta. Aplikacije se preporučuju za korištenje AEAD zauzvrat. Ako je način rada neautentificiran Potok potrebno, može se koristiti Novi CTR zauzvrat.
kripto/ecdsa
PrivateKey.Sign sada stvara deterministički potpis prema RFC 6979, ako je izvor slučajnosti nula.
kripto/md5
Povratna vrijednost md5.novo, sada također implementira sučelje kodiranje.binarni dodatak.
kripto/rand
Funkcija Čitaj sada jamči da nema kvarova. Ako Read naiđe na pogrešku tijekom čitanja Čitač, program će se trajno prekinuti. Imajte na umu da je dokumentirano da zadani Reader uvijek uspješno radi, tako da bi ova promjena trebala utjecati samo na programe koji nadjačavaju varijablu Reader. Jedna iznimka su kerneli. Linux do verzije 3.17, gdje zadani Reader i dalje otvara /dev/urandom i može zakazati.
Na Linux Verzija 6.11 i novije, Reader sada koristi sistemski poziv getrandom putem vDSO-a. To je nekoliko puta brže, obično za male brojeve čitanja.
Na OpenBSD Readeru sada koristi arc4random_buf(3).
Nova značajka Tekst sada može generirati kriptografski sigurne nasumične tekstualne nizove.
kripto/rsa
GenerateKey sada vraća pogrešku ako se traži duljina ključa manja od 1024 bita. Sve metode Sign, Verify, Encrypt i Decrypt sada vraćaju pogrešku ako se koriste s veličinom ključa manjom od 1024 bita. Takvi ključevi nisu sigurni i ne smiju se koristiti. Postavljanje GODEBUG-a rsa1024min=0 vraća staro ponašanje, ali Go programeri preporučuju da se to radi samo kada je potrebno i samo u testovima, na primjer dodavanjem retka //go:debug rsa1024min=0 testnoj datoteci. Novi primjer GenerateKey pruža standardni 2024-bitni testni ključ jednostavan za korištenje.
Sada je sigurnije i učinkovitije nazvati PrivateKey.Precompute na PrivateKey.Validate. Predizračunavanje je sada brže u prisutnosti djelomično ispunjenih Prethodno izračunate vrijednosti, na primjer kada izdvajate ključ iz JSON-a.
Paket sada odbija više nevažećih ključeva čak i kada se Validate ne pozove, i GenerateKey sada može vratiti nove pogreške za neispravne izvore slučajnosti. Polja Prim и Prethodno izračunato građevine PrivateKey sada se koriste i potvrđuju čak i kada neke vrijednosti nedostaju. Također postoje promjene u crypto/x509 za raščlanjivanje i izdvajanje RSA ključeva, opisane u nastavku.
SignPKCS1v15 и Provjerite PKCS1v15 sada podržavaju SHA-512/224, SHA-512/256 i SHA-3.
GenerateKey sada koristi nešto drugačiju metodu za generiranje privatnog eksponenta (Carmichaelova funkcija umjesto Eulerove funkcije). Rijetke aplikacije koje eksterno regeneriraju ključeve samo iz prostih brojeva mogu dati različite, ali kompatibilne rezultate.
Operacije na javnim i privatnim ključevima sada su do dva puta brže na wasm-u.
kripto/sha*
- kripto/sha1: povratna vrijednost sha1.Novo sada implementira i sučelje kodiranje.binarni dodatak.
- kripto/sha256: vraćene vrijednosti sha256.Novo и sha256.Novo224 sada implementirajte i sučelje kodiranje.binarni dodatak.
- kripto/sha512: vraćene vrijednosti sha512.Novo, sha512.Novo384, sha512.Novo512_224 и sha512.Novo512_256, sada također implementirajte sučelje kodiranje.binarni dodatak.
kripto/suptilno
Nova značajka WithDataIndependentTiming omogućuje korisniku da izvrši funkciju s omogućenim značajkama specifičnim za arhitekturu koje osiguravaju da se određene upute ne mijenjaju u odnosu na vrijeme vrijednosti podataka. Ovo se može koristiti kako bi se osiguralo da kod napisan za izvođenje u konstantnom vremenu nije optimiziran funkcijama na razini procesora tako da se izvodi u promjenjivom vremenu. Trenutno WithDataIndependentTiming koristi PSTATE.DIT bit na arm64 i ne radi ništa na svim drugim arhitekturama. Postavljanje GODEBUG-a datadependenttiming=1 omogućuje DIT način za cijeli Go program.
Izlaz XORBytes mora se u potpunosti ili uopće ne preklapati s unosom. Prethodno je ponašanje inače bilo nedefinirano, dok će sada XORBytes paničariti.
kripto/tls
TLS poslužitelj sada podržava Encrypted Client Hello (ECH). Ova značajka se može omogućiti ispunjavanjem polja. Config.EncryptedClientHelloKeys.
Novi post-kvantni mehanizam razmjene ključeva X25519MLKEM768 sada podržano i omogućeno prema zadanim postavkama kada Config.CurvePreferences je nula. Postavljanje GODEBUG-a tlsmlkem=0 vraća zadano.
Podrška za eksperimentalnu razmjenu ključeva X25519Kyber768Draft00 je uklonjena.
Nalogom za razmjenu ključeva sada u potpunosti upravlja paket crypto/tls. Redoslijed Config.CurvePreferences sada se zanemaruje i sadržaj se koristi samo za određivanje koje razmjene ključeva uključiti kada se polje ispuni.
Novo polje ClientHelloInfo.Extensions Navodi popis identifikatora proširenja primljenih u poruci Pozdrav klijenta. Ovo može biti korisno za TLS klijente s otiskom prsta.
kripto/x509
Postavljanje GODEBUG-a x509sha1 je uklonjen. Certifikacija.Provjeri više ne podržava potpise temeljene na SHA-1.
OID sada implementira sučelja kodiranje.binarni dodatak и kodiranje.TextAppender.
Zadano polje politike certifikata promijenjeno je iz Certifikat.PolicyIdentifiers na Certifikat. Politike. Prilikom raščlambe certifikata, oba će polja biti popunjena, ali kada se kreira politika certifikata, bit će preuzeta iz polja Certificate.Policies umjesto Certificate.PolicyIdentifiers. Ova se promjena može poništiti. Postavljanje GODEBUG-a x509usepolicies=0.
CreateCertificate sada će generirati serijski broj korištenjem metode usklađene s RFC 5280 prilikom prosljeđivanja polja predloška Certifikat.Serijski broj nula, umjesto da se sruši.
Certifikat.Provjeri sada podržava provjeru valjanosti pravila kako je definirano u RFC 5280 i RFC 9618. Novo polje VerifyOptions.CertificatePolicies može se postaviti na prihvatljiv skup pravila OID-ovi. Vratit će se samo lanci certifikata s važećim grafikonima pravila Certifikat.Provjeri.
MarshalPKCS8PrivateKey sada vraća pogrešku umjesto dohvaćanja nevažećeg RSA ključa. (MarshalPKCS1PrivateKey nema vraćanja pogreške i njegovo ponašanje kada su dostavljeni nevažeći ključevi ostaje nedefinirano.)
ParsePKCS1PrivateKey и ParsePKCS8PrivateKey sada koristi i potvrđuje kodirane CRT vrijednosti, tako da može odbiti nevažeće RSA ključeve koji su prethodno bili prihvaćeni. Korištenje GODEBUG postavke x509rsacrt=0 vraća na ponovno izračunavanje CRT vrijednosti.
debug/vilenjak
paket debug/vilenjak Dodaje podršku za rukovanje verzijama simbola u dinamičkim ELF (Executable and Linkable Format) datotekama. Nova metoda File.DynamicVersions Vraća popis dinamičkih verzija definiranih u ELF datoteci. Nova metoda Datoteka.DynamicVersionNeeds Vraća popis dinamičkih verzija koje zahtijeva ova ELF datoteka, a koje su definirane u drugim ELF objektima. Napokon nova polja Symbol.HasVersion и Symbol.VersionIndex označite verziju simbola.
kodiranje
Dva nova sučelja TextAppender и Binarni dodatak uvedeni su za dodavanje teksta ili binarnog prikaza objekta odsječku bajta. Ova sučelja pružaju istu funkcionalnost kao TextMarshaler и BinaryMarshaler, ali umjesto da svaki put dodijele novi odsječak, dodaju podatke izravno u postojeći odsječak. Ta su sučelja trenutno implementirana standardnim vrstama biblioteka koje već implementiraju TextMarshaler i/ili BinaryMarshaler.
kodiranje/json
Prilikom izgradnje, polje strukture s novom opcijom omitzero u oznaci polja strukture bit će izostavljeno ako je njegova vrijednost nula. Ako vrsta polja ima IsZero() bool metodu, ona će se koristiti za određivanje je li vrijednost nula. Inače će vrijednost biti nula ako je nulta vrijednost za svoj tip. Oznaka polja omitzero čišća je i manje sklona pogreškama nego omitempty kada je namjera izostaviti nulte vrijednosti. Konkretno, za razliku od omitempty, omitzero izostavlja nule vrijeme.vrijeme vrijednosti, što je čest izvor problema.
Ako su navedeni i omitempty i omitzero, polje će biti izostavljeno ako je vrijednost prazna ili nula (ili oboje).
UnmarshalTypeError.Field sada uključuje ugrađene strukture za pružanje detaljnijih poruka o pogrešci.
idi/tipovi
Sve go/types podatkovne strukture koje izlažu sekvence parova metoda, poput Len() int i At(int) T, sada također imaju metode koje vraćaju iteratore, dopuštajući jednostavniji kod poput ovog:
params := fn.Type.(*types.Signature).Params() for i := 0; i < parametri.Len(); i++ { use(params.At(i))}
Na ovom:
za param := raspon fn.Signature().Params().Variables() { use(param)}
metode: Sučelje.EmbeddedTypes Sučelje.ExplicitMethods Sučelje. Metode MethodSet.Metode Imenovan.Metode Opseg.Djeca Struktura.Polja Tuple.Varijable TypeList.Tipovi TypeParamList.TypeParams Unija.Uvjeti
hash/*
- hash/adler32: povratna vrijednost Novo, sada također implementira sučelje kodiranje.binarni dodatak
- hash/crc32: vraćene vrijednosti Novo и NovoIEEE, sada također implementirajte sučelje kodiranje.binarni dodatak
- hash/crc64: povratna vrijednost Novo, sada također implementira sučelje kodiranje.binarni dodatak
- hash/fnv: vraćene vrijednosti New32 Novo32a New64 Novo64a New128 и Novo128a, sada također implementirajte sučelje kodiranje.binarni dodatak
- hash/maphash: nove značajke Usporedive и Napiši Usporedivo može izračunati hash bilo koje vrijednosti koja se može usporediti. To vam omogućuje hashiranje svega što se može koristiti kao ključ rječnika Go.
balvan/slog
Novi DiscardHandler je rukovatelj koji nikada nije omogućen i uvijek odbacuje svoj izlaz.
Nivo и LevelVar sada implementirajte sučelje kodiranje.TextAppender.
matematika/*
- matematika/velik: Plutati, Int и Štakor sada implementirajte sučelje kodiranje.TextAppender.
- matematika/rand: zastarjeli pozivi funkcija najviše razine Sjeme više nemaju nikakvog učinka. Da biste vratili staro ponašanje, možete koristiti Postavljanje GODEBUG-a randseednop=0. Više konteksta u ponuda 67273.
- matematika/rand/v2: ChaCha8 и PCG sada implementirajte sučelje kodiranje.binarni dodatak.
neto
ListenCondig sada koristi MPTCP prema zadanim postavkama na sustavima gdje je podržan (trenutno samo Linux).
IP sada implementira sučelje kodiranje.TextAppender.
net/http
Ograničenje je promijenjeno prijevoz na primljene 1xx informacijske odgovore kao odgovor na zahtjev. Prethodno bi to zaustavilo zahtjev i vratilo pogrešku nakon primanja više od 5 1xx odgovora. Ovo sada vraća pogrešku samo ako ukupna veličina svih 1xx odgovora premašuje postavku konfiguracije Transport.MaxResponseHeaderBytes.
Također, kada zahtjev ima kuku za praćenje net/http/httptrace.ClientTrace.Got1xxResponse, sada nema ograničenja ukupnog broja odgovora 1xx. Priključak Got1xxResponse može vratiti pogrešku kako bi zaustavio zahtjev.
prijevoz и Server sada imate HTTP2 polje koje omogućuje konfiguraciju postavki HTTP/2 protokola.
Nova polja Poslužitelj.Protokoli и Transport.Protokoli pružaju jednostavan način za konfiguriranje koje HTTP protokole poslužitelj ili klijent koristi.
Poslužitelj i klijent mogu se konfigurirati da podržavaju nekriptirane HTTP/2 veze.
Kada Poslužitelj.Protokoli sadrži UnencrypterHTTP2, poslužitelj će prihvatiti HTTP/2 veze na nekriptiranim portovima. Poslužitelj može prihvatiti i HTTP/1 i nekriptirani HTTP/2 na istom priključku.
Kada Transport.Protokoli sadrži UnencryptedHTTP2 i ne sadrži HTTP1, prijenos će koristiti nekriptirani HTTP/2 za adrese http://. Ako je prijenos konfiguriran za korištenje HTTP/1 i nekriptiranog HTTP/2, koristit će HTTP/1.
Podrška za nekriptirani HTTP/2 koristi "HTTP/2 s naprednim učenjem" (RFC 9113, odjeljak 3.3). Zastarjelo zaglavlje "Nadogradnja: h2c" nije podržano.
neto/netip
adr, AddrPort и Prefiks sada implementirajte sučelja kodiranje.binarni dodatak и kodiranje.TextAppender.
net/url
URL sada implementira i sučelje kodiranje.binarni dodatak.
os/korisnik
В Windows struja sada se može koristiti u Windows Nano Server. Implementacija je ažurirana kako bi se izbjeglo korištenje funkcija iz biblioteke NetApi32, koja nedostaje u Nano Serveru.
В Windows struja, Traži и LookupId sada podržava sljedeće ugrađene korisničke servisne račune:
- NT AUTORITYSYSTEM
- NT AUTHORITYLOCAL SERVICE
- NT AUTHORITYNETWORK USLUGA
В Windows struja je značajno ubrzan kada se trenutni korisnik pridruži sporoj domeni, što je čest slučaj za mnoge korporativne korisnike. Učinkovitost nove implementacije sada je reda veličine milisekundi, u usporedbi s prethodnom implementacijom, za što bi moglo biti potrebno nekoliko sekundi, čak i minuta.
В Windows struja sada vraća korisnika vlasnika procesa kada trenutna nit oponaša drugog korisnika. Prethodno je ovo vraćalo pogrešku.
reg.
Regexp sada implementira sučelje kodiranje.TextAdapter.
runtime
Funkcija GOROOT sada je zastario. U novijim okruženjima trebali biste radije koristiti sistemsku stazu za određivanje "go" binarne datoteke i koristiti go env GOROOT za određivanje GOROOT.
žice
paket žice dodaje nekoliko funkcija za rad s iteratorima:
- Linije Vraća iterator preko redaka odvojenih novim retkom u nizu.
- SplitSeq vraća iterator preko svih podnizova niza odvojenih separatorom.
- SplitAfterSeq vraća iterator preko podnizova niza, podijeljenih nakon svakog pojavljivanja separatora.
- FieldsSeq vraća iterator preko podnizova niza oko sekvenci razmaka, kako je definiranounicode.IsSpace
- FieldsFuncSeq Vraća iterator preko podnizova niza oko nizova Unicode kodnih točaka koje zadovoljavaju predikat.
sinkronizirati
Provedba sink.karta je promijenjen kako bi se poboljšala izvedba, posebno za izmjene rječnika. Na primjer, manje je vjerojatno natjecanje za promjenu disjunktnog skupa na velikim rječnicima i više ne zahtijeva vrijeme izgradnje za postizanje niskog opterećenja rječnika.
Ako naiđete na bilo kakve probleme, postavite GOEXPERIMENT=nosynchashtriemap tijekom izgradnje da biste se vratili na staru implementaciju i molimo ispuni obrazac problema.
testiranje
Nove metode T. Kontekst и B. Kontekst vraća kontekst koji se odbacuje nakon završetka testa i prije nego što se izvrše funkcije čišćenja testa.
Nove metode T.Chdir и B.Chdir može se koristiti za promjenu radnog direktorija tijekom trajanja testa ili benchmarka.
tekst/predložak
Predlošci sada podržavaju range-over-func i range-over-int.
vrijeme
Vrijeme sada implementira sučelja kodiranje.binarni dodatak и kodiranje.TextAppender.
Luke
Linux
Kao što je bilo najavio U bilješkama o izdanju Go 1.23, Go 1.24 zahtijeva jezgru Linux verzija 3.2 ili novija.
Darwin
Go 1.24 je posljednje izdanje koje će raditi na macOS 11 Big Sur. Za Go 1.25 bit će potrebno macOS 12 Monterey ili kasnije.
WebAssembly
Direktiva prevoditelja go:wasmexport dodana je Go programima za izvoz funkcija na host WebAssembly.
U WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm), Go 1.24 podržava izgradnju Go programa kao reaktor/knjižnica određivanjem oznake izgradnje -buildmode=c-shared.
Sada je dopušteno više vrsta kao vrsta argumenata ili rezultata za funkcije go:wasmimport. Konkretno, dopušteni su bool, string, uintptr i pokazivači na određene tipove (pogledajte detalje u dokumentacija), zajedno s 32-bitnim i 64-bitnim cijelim brojem i tipovima s pomičnim zarezom te unsafe.Pointer, koji su već dopušteni. Ove su vrste također dopuštene kao vrste argumenata ili rezultata za funkcije go:wasmexport.
Datoteke podrške za WebAssembly premještene su u lib/wasm iz misc/wasm.
Početni memorijski otisak značajno je smanjen, posebno za male WebAssembly aplikacije.
Windows
32-bitni windows/arm port (GOOS=windows GOARCH=arm) označen je kao pokvaren. Detalji u #70705
Izvor: linux.org.ru
