{"id":121950,"date":"2025-02-15T14:22:29","date_gmt":"2025-02-15T12:22:29","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/go-1-24"},"modified":"2025-02-15T14:22:29","modified_gmt":"2025-02-15T12:22:29","slug":"go-1-24","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/news\/go-1-24","title":{"rendered":"Go 1.24","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><a rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/images\/21754\/original.png\" itemprop=\"contentURL\">            <img decoding=\"async\" alt=\"Go 1.24\" src=\"\/wp-content\/uploads\/2025\/02\/6d6299421d83951d055782658814425f.jpg\" style=\"display:block;margin: 0 auto;\" \/>                   <\/a>                       <noindex>      <noindex><\/p>\n<p>Noua versiune a limbajului Go, versiunea 1.24, este lansat\u0103 la \u0219ase luni dup\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23\">Go 1.23<\/a>. Cele mai multe modific\u0103ri vizeaz\u0103 implementarea toolchain-ului, runtime-ului \u0219i bibliotecilor. Ca de obicei, lansarea ofer\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1compat\">promisiunea de compatibilitate<\/a> Go 1. Dezvoltatorii limbajului se a\u0219teapt\u0103 ca aproape toate programele Go s\u0103 continue s\u0103 compileze \u0219i s\u0103 func\u021bioneze ca \u00eenainte.<\/p>\n<p><\/noindex><\/noindex>  <\/p>\n<h2>Modific\u0103ri \u00een limbaj<\/h2>\n<p> <noindex><\/p>\n<p>Go 1.24 acum suport\u0103 complet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/46477\">aliasuri generice de tipuri<\/a>: un alias de tip poate fi parametrizat ca un tip declarat. Detalii \u00een <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#Alias_declarations\">specifica\u021bia limbajului<\/a>. Deocamdat\u0103, aceast\u0103 caracteristic\u0103 poate fi dezactivat\u0103 prin setarea GOEXPERIMENT=noaliastypeparams; totu\u0219i, op\u021biunea aliastypeparams va fi eliminat\u0103 \u00een Go 1.25.<\/p>\n<p><\/noindex> <\/p>\n<h2>Instrumente<\/h2>\n<h3>Comanda go<\/h3>\n<p> <noindex><\/p>\n<p>Modulele go pot acum s\u0103 urm\u0103reasc\u0103 dependen\u021bele executabile folosind directivele tool \u00een go.mod. Aceasta elimin\u0103 necesitatea unei solu\u021bii anterioare de a ad\u0103uga uneltele ca importuri goale \u00een fi\u0219ier, adesea denumit \u201ctools.go\u201d. Comanda go tool poate acum s\u0103 execute aceste unelte pe l\u00e2ng\u0103 uneltele livrate \u00eempreun\u0103 cu Go. Mai multe informa\u021bii pot fi vizualizate \u00een <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/modules\/managing-dependencies#tools\">documentation<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Noua op\u021biune -tool pentru go get duce la ad\u0103ugarea unei directive instrument \u00een modul curent pentru pachetele specificate, pe l\u00e2ng\u0103 ad\u0103ugarea directivelor de cerin\u021b\u0103.<\/p>\n<p> <noindex><\/p>\n<p>Un nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go#hdr-Package_lists_and_patterns\">meta-modelul tool<\/a> se refer\u0103 la toate uneltele din modul curent. Acesta poate fi folosit pentru a le actualiza pe toate prin go get tool sau pentru a le instala \u00een directorul GOBIN prin go install tool.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Fi\u0219ierele executabile create prin go run \u0219i noul comportament go tool sunt acum stocate \u00een cache-ul de construc\u021bie Go. Aceasta face ca execu\u021biile repetate s\u0103 fie mai rapide datorit\u0103 cache-ului crescut. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/69290\">#69290<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Comenzile go build \u0219i go install accept\u0103 acum op\u021biunea -json, care raporteaz\u0103 ie\u0219irea \u0219i erorile construc\u021biei ca ie\u0219ire structurat \u00een JSON \u00een ie\u0219irea standard. Detalii despre format pot fi v\u0103zute \u00een go help buildjson.<\/p>\n<p> <noindex><\/p>\n<p>\u00cen plus, go test -json acum raporteaz\u0103 ie\u0219irea \u0219i erorile construc\u021biei \u00een JSON, al\u0103turi de JSON-ul rezultatului test\u0103rii. Acestea pot fi distinse prin noile tipuri de Ac\u021biune, dar dac\u0103 acestea cauzeaz\u0103 probleme \u00een sistemul de integrare a testelor, este posibil s\u0103 reveni\u021bi la ie\u0219irea textului de construc\u021bie prin <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">setarea GODEBUG<\/a> gotestjsonbuildtext=1.<\/p>\n<p><\/noindex> <\/p>\n<p>Noua variabil\u0103 de mediu GOAUTH ofer\u0103 o modalitate flexibil\u0103 de a autentifica tragerea privat\u0103 a modulelor. Detalii pot fi v\u0103zute \u00een go help goauth.<\/p>\n<p> <noindex><\/p>\n<p>Comanda go build acum instaleaz\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/debug#BuildInfo.Main\">versiunea modulului principal<\/a> \u00een fi\u0219ierul binar compilat, bazat pe tag-ul \u0219i\/sau commit-ul sistemului de control al versiunilor. Sufixul +dirty va fi ad\u0103ugat \u00een cazul \u00een care exist\u0103 modific\u0103ri necomise. Po\u021bi folosi flag-ul -buildvcs=false pentru a omite informa\u021biile de control al versiunilor din binar.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configurarea GODEBUG<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/toolchain#select\">toolchaintrace=1<\/a> acum poate fi utilizat\u0103 pentru a urm\u0103ri procesul de alegere a toolchain-ului \u00een echipa go.<\/p>\n<p><\/noindex> <\/p>\n<h3>Cgo<\/h3>\n<p> <noindex><\/p>\n<p>Cgo suport\u0103 noi adnot\u0103ri pentru func\u021biile C pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba la timpul de execu\u021bie. #cgo noescape cFunctionName spune compilatorului c\u0103 memoria trecut\u0103 la func\u021bia C cFunctionName nu este eliberat\u0103. #cgo nocallback cFunctionName spune compilatorului c\u0103 func\u021bia C cFunctionName nu apeleaz\u0103 \u00eenapoi nicio func\u021bie Go. Mai multe informa\u021bii pot fi g\u0103site \u00een <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/cgo#hdr-Optimizing_calls_of_C_code\">documenta\u021bia cgo<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Cgo refuz\u0103 acum compilarea apelurilor func\u021biilor C care au declara\u021bii incompatibile. De exemplu, dac\u0103 f este declarat at\u00e2t void f(int) c\u00e2t \u0219i void f(double), cgo va raporta o eroare \u00een loc s\u0103 genereze o secven\u021b\u0103 de apeluri incorect\u0103 pentru f(0). Nou \u00een aceast\u0103 versiune este \u00eembun\u0103t\u0103\u021birea detect\u0103rii acestei condi\u021bii de eroare atunci c\u00e2nd declara\u021biile incompatibile apar \u00een fi\u0219iere diferite. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67699\">#67699<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Objdump<\/h3>\n<p>Instrumentul objdump sus\u021bine acum disassemblarea pe arhitectura 64-bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) \u0219i S390X (GOARCH=s390x).<\/p>\n<h3>Vet<\/h3>\n<p>Noua analiz\u0103 tests raporteaz\u0103 erori comune \u00een declara\u021biile testelor, fuzzers, benchmarks \u0219i exemple \u00een pachetele de teste, cum ar fi nume prost formate, semn\u0103turi incorecte sau exemple care documenteaz\u0103 identificatori inexistent. Unele dintre aceste erori pot duce la nep\u0103strarea testelor.<\/p>\n<p> <noindex><\/p>\n<p>Analizorul printf existent raporteaz\u0103 acum diagnostice pentru apeluri de form\u0103 fmt.Printf(s), unde s este un \u0219ir de format non-constant, f\u0103r\u0103 al\u021bi parametri. Astfel de apeluri sunt aproape \u00eentotdeauna o eroare, deoarece valoarea s poate con\u021bine caracterul %; \u00een schimb, folose\u0219te fmt.Print. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/60529\">60529<\/a>. Aceast\u0103 verificare tinde s\u0103 fac\u0103 descoperiri \u00een codul existent \u0219i, prin urmare, se aplic\u0103 doar c\u00e2nd versiunea limbajului (a\u0219a cum este specificat de directiva go a fi\u0219ierului go.mod sau comentariile `\/\/go:build) este cel pu\u021bin Go 1.24, pentru a evita apari\u021bia defectelor \u00een integrarea continu\u0103 la actualizarea la toolchain-ul Go 1.24.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Analizatorul existent buildtag acum raporteaz\u0103 diagnostice atunci c\u00e2nd exist\u0103 o eroare <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/go#hdr-Build_constraints\">\u00een limita versiunii superioare<\/a> Go \u00een directiva \/\/go:build. De exemplu, \/\/go:build go1.23.1 se refer\u0103 la o versiune punctat\u0103; \u00een schimb, utiliza\u021bi \/\/go:build go1.23. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/64127\">#64127<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Analizatorul existent copylock acum raporteaz\u0103 diagnostice atunci c\u00e2nd variabila, declarat\u0103 \u00eentr-un ciclu \u201efor\u201d triplu, cum ar fi for i := iter(); done(i); i = next(i) { \u2026 }, con\u021bine sync.Locker, cum ar fi sync.Mutex. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#language\">Go 1.22<\/a> a schimbat comportamentul acestor cicluri pentru a crea o nou\u0103 variabil\u0103 pentru fiecare itera\u021bie, copierea valorilor din itera\u021bia anterioar\u0103; aceast\u0103 copiere nu este sigur\u0103 pentru lock-uri. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/66387\">#66387<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>GOCACHEPROG<\/h3>\n<p> <noindex><\/p>\n<p>Binarul intern cmd\/go \u0219i mecanismul de cache pentru teste pot acum fi implementate de procese fiice, care implementeaz\u0103 protocolul JSON \u00eentre instrumentul cmd\/go \u0219i procesul fiu, numit variabila de mediu GOCACHEPROG. Anterior, acesta era pentru GOEXPERIMENT. Detalii ale protocolului pot fi v\u0103zute \u00een <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go\/internal\/cacheprog\">documentation<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Timp de execu\u021bie<\/h2>\n<p> <noindex><\/p>\n<p>Mai multe \u00eembun\u0103t\u0103\u021biri de performan\u021b\u0103 \u00een runtime au redus cheltuielile pe CPU cu 2-3% \u00een medie \u00een r\u00e2ndul unui set de benchmark-uri reprezentative. Rezultatele pot varia \u00een func\u021bie de aplica\u021bie. Aceste \u00eembun\u0103t\u0103\u021biri includ o nou\u0103 implementare \u00eencorporat\u0103 a map-ului bazat\u0103 pe <a rel=\"nofollow\" href=\"https:\/\/abseil.io\/about\/design\/swisstables\">Tabelele Suedeze<\/a>, o alocare de memorie mai eficient\u0103 pentru obiecte mici \u0219i o nou\u0103 implementare intern\u0103 a mutex-ului \u00een timpul execu\u021biei.<\/p>\n<p><\/noindex> <\/p>\n<p>Noua implementare \u00eencorporat\u0103 a map-ului \u0219i noul mutex intern al runtime-ului pot fi dezactivate prin set\u0103rile GOEXPERIMENT=noswissmap \u0219i GOEXPERIMENT=nospinbitmutex \u00een timpul compil\u0103rii, respectiv.<\/p>\n<h2>Compilatorul<\/h2>\n<p>Compilatorul interzice deja definirea de metode noi cu tipuri de primire generate de cgo, dar era posibil s\u0103 ocolim aceast\u0103 restric\u021bie prin aliasul de tip. Go 1.24 acum raporteaz\u0103 \u00eentotdeauna o eroare dac\u0103 primitorul denoteaz\u0103 un tip cgo generat, direct sau indirect (prin alias de tip).<\/p>\n<h2>Linkerul<\/h2>\n<p>Linkerul acum genereaz\u0103 un identificator de construc\u021bie GNU (\u00eenregistrarea ELF NT_GNU_BUILD_ID) pe platformele ELF \u0219i UUID (comanda de \u00eenc\u0103rcare Mach-O LC_UUID) pe macOS, \u00een mod implicit. Identificatorul de construc\u021bie sau UUID-ul este derivat din identificatorul de construc\u021bie Go. Acesta poate fi dezactivat cu flagul linker-ului -B none, sau suprascris cu flagul linker-ului -B 0xNNNN cu o valoare hexazecimal\u0103 specificat\u0103 de utilizator.<\/p>\n<h2>Rollover<\/h2>\n<p> <noindex><\/p>\n<p>A\u0219a cum a fost men\u021bionat \u00een <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#bootstrap\">noti\u021bele de lansare Go 1.22<\/a>, Go 1.24 necesit\u0103 acum Go 1.22.6 sau o versiune ulterioar\u0103 pentru compilare. Dezvoltatorii se a\u0219teapt\u0103 ca Go 1.26 s\u0103 necesite un release punctual Go 1.24 sau o versiune ulterioar\u0103 pentru compilare.<\/p>\n<p><\/noindex> <\/p>\n<h2>Biblioteca standard<\/h2>\n<h3>Acces la sistemul de fi\u0219iere restric\u021bionat la un director<\/h3>\n<p> <noindex><\/p>\n<p>Tip nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> ofer\u0103 posibilitatea de a efectua opera\u021bii pe sistemul de fi\u0219iere \u00een cadrul unui anumit director.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Func\u021bia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#OpenRoot\">os.OpenRoot<\/a> deschide un director \u0219i returneaz\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a>. Metodele de pe <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> ac\u021bioneaz\u0103 \u00een acest director \u0219i nu permit ca calea s\u0103 fac\u0103 referire la loca\u021bii din afara directorului, inclusiv cele care urmeaz\u0103 link-uri simbolice dincolo de director. Metodele de pe os.Root reflect\u0103 majoritatea opera\u021biunilor sistemului de fi\u0219iere disponibile \u00een pachetul os, inclusiv, de exemplu, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Open\">os.Root.Open<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Create\">os.Root.Create<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Mkdir\">os.Root.Mkdir<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Stat\">os.Root.Stat<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Noua func\u021bie de benchmark<\/h3>\n<p> <noindex><\/p>\n<p>Benchmarks pot acum s\u0103 foloseasc\u0103 o metod\u0103 mai rapid\u0103 \u0219i mai pu\u021bin predispus\u0103 la erori <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Loop\">testing.B.Loop<\/a> pentru a itera benchmark-ul precum for b.Loop() { \u2026 } \u00een loc de structuri tipice de loop cu b.N precum for range b.N. Acest lucru ofer\u0103 dou\u0103 avantaje semnificative:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>Func\u021bia de benchmark este executat\u0103 exact o dat\u0103 pentru fiecare -count, astfel \u00eenc\u00e2t pa\u0219ii costisitori de setup \u0219i cleanup sunt executa\u021bi o singur\u0103 dat\u0103.<\/li>\n<li>Parametrii apelului de func\u021bie \u0219i rezultatele continu\u0103 s\u0103 existe, \u00eempiedic\u00e2nd compilatorul s\u0103 optimizeze complet corpul buclei.<\/li>\n<\/ul>\n<h3>Finalizatoare \u00eembun\u0103t\u0103\u021bite<\/h3>\n<p> <noindex><\/p>\n<p>Nou\u0103 func\u021bie <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#AddCleanup\">runtime.AddCleanup<\/a> este un mecanism de finalizare care este mai flexibil, mai eficient \u0219i mai pu\u021bin predispus la erori dec\u00e2t <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#SetFinalizer\">runtime.SetFinalizer<\/a>. AddCleanup ata\u0219eaz\u0103 o func\u021bie de cur\u0103\u021bare obiectului, care va fi executat\u0103 imediat ce obiectul devine inaccesibil. Totu\u0219i, spre deosebire de SetFinalizer, mai multe cur\u0103\u021biri pot fi ata\u0219ate unui singur obiect, cur\u0103\u021birile pot fi ata\u0219ate la pointere interne, iar cur\u0103\u021birile de obicei nu cauzeaz\u0103 scurgeri atunci c\u00e2nd obiectele formeaz\u0103 un ciclu \u0219i cur\u0103\u021birile nu \u00eent\u00e2rzie eliberarea unui obiect sau a obiectelor la care acesta se refer\u0103. Codul nou ar trebui s\u0103 prefere AddCleanup \u00eenainte de SetFinalizer.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nou\u0103 pachet weak<\/h3>\n<p> <noindex><\/p>\n<p>Pachetul nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/weak\/\">weak<\/a> ofer\u0103 pointere slabe.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Pointerele slabe sunt un primitiv de nivel inferior, oferit pentru a crea structuri care utilizeaz\u0103 eficient memoria, cum ar fi dic\u021bionare slabe pentru asocieri de valori, dic\u021bionare de canonizare pentru orice nu este acoperit de pachetul <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unique\/\">unique<\/a>, \u0219i diverse tipuri de cache. Pentru a sus\u021bine aceste cazuri de utilizare, aceast\u0103 versiune ofer\u0103 de asemenea <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/#AddCleanup\">runtime.AddCleanup<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/maphash\/#Comparable\">maphash.Comparable<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Noua bibliotec\u0103 crypto\/mlkem<\/h3>\n<p> <noindex><\/p>\n<p>Pachetul nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/mlkem\/\">crypto\/mlkem<\/a> implementeaz\u0103 ML-KEM-768 \u0219i ML-KEM-1024.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>ML-KEM este un mecanism post-cuantum pentru schimbul de chei, cunoscut anterior sub numele de Kyber \u0219i specificat \u00een <a rel=\"nofollow\" href=\"https:\/\/doi.org\/10.6028\/NIST.FIPS.203\">FIPS 203<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Noile biblioteci crypto\/hkdf, crypto\/pbkdf2 \u0219i crypto\/sha3<\/h3>\n<p> <noindex><\/p>\n<p>Pachetul nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/hkdf\/\">crypto\/hkdf<\/a> implementeaz\u0103 o func\u021bie de derivare a cheilor bazat\u0103 pe HMAC \u201cExtract-and-Expand\u201d HKDF, conform <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5869.html\">RFC 5869<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Pachetul nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/pbkdf2\/\">crypto\/pbkdf2<\/a> implementeaz\u0103 o func\u021bie de derivare a cheilor bazat\u0103 pe parol\u0103 PBKDF2, conform <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8018.html\">RFC 8018<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Pachetul nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha3\/\">crypto\/sha3<\/a> implementeaz\u0103 func\u021bia hash SHA-3 \u0219i func\u021biile SHAKE \u0219i cSHAKE pentru ie\u0219ire extensibil\u0103, conform <a rel=\"nofollow\" href=\"http:\/\/doi.org\/10.6028\/NIST.FIPS.202\">FIPS 202<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Toate cele trei biblioteci se bazeaz\u0103 pe biblioteci existente de golang.org\/x\/crypto\/\u2026<\/p>\n<h3>Conformitate FIPS 140-3<\/h3>\n<p> <noindex><\/p>\n<p>Aceast\u0103 versiune include <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/security\/fips140\">un nou set de mecanisme pentru a asigura conformitatea cu FIPS 140-3<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Modul criptografic Go este un set de biblioteci interne standard care sunt folosite transparent pentru a implementa algoritmi aproba\u021bi FIPS 140-3. Aplica\u021biile nu necesit\u0103 modific\u0103ri pentru a utiliza modul criptografic Go pentru algoritmi aproba\u021bi.<\/p>\n<p> <noindex><\/p>\n<p>Noua variabil\u0103 de mediu GOFIPS140 poate fi utilizat\u0103 pentru a selecta versiunea modulului criptografic Go pentru utilizarea \u00een compilare. Noua <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configurarea GODEBUG<\/a> fips140 poate fi utilizat\u0103 pentru a activa modul FIPS 140-3 \u00een timpul execu\u021biei.<\/p>\n<p><\/noindex> <\/p>\n<p>Go 1.24 include modul criptografic Go versiunea v1.0.0, care este \u00een prezent testat cu un laborator CMVP acreditat.<\/p>\n<h3>Noua bibliotec\u0103 experimental\u0103 testing\/synctest<\/h3>\n<p> <noindex><\/p>\n<p>Noua bibliotec\u0103 experimental\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/\">testing\/synctest<\/a> ofer\u0103 suport pentru testarea codului concurent.<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>Func\u021bia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/#Run\">synctest.Run<\/a> porne\u0219te un grup de goroutines \u00eentr-o \u201cbula\u201d izolat\u0103. \u00cen bula func\u021biile bibliotecii <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\">time<\/a> func\u021bioneaz\u0103 pe ceasuri false.<\/li>\n<li>Functions <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest#Wait\">synctest.Wait<\/a> a\u0219teapt\u0103 ca toate goroutines s\u0103 fie blocate \u00een bula curent\u0103.<\/li>\n<\/ul>\n<p>Detalii suplimentare pot fi g\u0103site \u00een documenta\u021bia bibliotecii.<\/p>\n<p> <noindex><\/p>\n<p>Biblioteca synctest este experimental\u0103 \u0219i trebuie activat\u0103 prin setarea GOEXPERIMENT=synctest. API-ul bibliotecii poate fi modificat \u00een versiuni viitoare. \u00cen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67434\">#67434<\/a> se pot g\u0103si mai multe detalii \u0219i se poate oferi feedback.<\/p>\n<p><\/noindex> <\/p>\n<h3>Modific\u0103ri minore \u00een biblioteca<\/h3>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/archive\/\">archive<\/a><\/h4>\n<p>Implement\u0103rile (*Writer.AddFS) \u00een archive\/zip \u0219i archive\/tar scriu acum antetul directorului pentru un director gol.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\/\">bytes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pachet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\">bytes<\/a> adaug\u0103 c\u00e2teva func\u021bii care lucreaz\u0103 cu itera\u021bii:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#Lines\">Lines<\/a> returneaz\u0103 un iterator pentru liniile separate de newline \u00eentr-un slice de byte.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitSeq\">SplitSeq<\/a> returneaz\u0103 un iterator pentru toate subsecven\u021bele unui slice de octe\u021bi, divizat de separator.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitAfterSeq\">SplitAfterSeq<\/a> returneaz\u0103 un iterator pentru subsecven\u021bele unui slice de octe\u021bi, divizat dup\u0103 fiecare ocorren\u021b\u0103 a separatorului.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsSeq\">FieldsSeq<\/a> returneaz\u0103 un iterator pentru subsecven\u021bele unui slice de octe\u021bi \u00een jurul secven\u021belor de caractere spa\u021biu, a\u0219a cum este definit. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unicode#IsSpace\">unicode.IsSpace<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsFuncSeq\">FieldsFuncSeq<\/a> returneaz\u0103 un iterator pentru subsecven\u021bele unui slice de octe\u021bi \u00een jurul secven\u021belor de puncte de cod Unicode, care satisfac predicatul.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Valoarea returnat\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes#NewCipher\">NewChipher<\/a> nu mai implementeaz\u0103 metodele NewCTR, NewGCM, NewCBCEncrypter \u0219i NewCBCDecrypter. Aceste metode erau nedocumentate \u0219i nu erau disponibile pe toate arhitecturile. Acum valoarea <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Block\">Block<\/a> trebuie s\u0103 fie transmis\u0103 direct func\u021biilor corespunz\u0103toare. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a>. \u00cen prezent, crypto\/cipher \u00eenc\u0103 verific\u0103 aceste metode pe valorile Block, chiar dac\u0103 acestea nu mai sunt suportate de biblioteca standard.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nou\u0103 func\u021bie <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewGCMWithRandomNonce\">NewGCMWithRandomNonce<\/a> \u00eentoarce <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a>, care implementeaz\u0103 AES-GCM, gener\u00e2nd un num\u0103r aleatoriu de unic\u0103 folosin\u021b\u0103 \u00een timpul Seal \u0219i ad\u0103ug\u00e2ndu-l la \u00eenceputul textului criptat.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Implementarea <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a>, returnat <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> c\u00e2nd este utilizat cu <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a> este acum de c\u00e2teva ori mai rapid pe amd64 \u0219i arm64.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewOFB\">NewOFB<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBEncrypter\">NewCFBEncrypter<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBDecrypter\">NewCFBDecrypter<\/a> sunt acum declarate \u00eenvechite. Modurile OFB \u0219i CFB sunt neautentificate, ceea ce permite, \u00een general, atacuri active s\u0103 manipuleze \u0219i s\u0103 recupereze textul deschis. Aplica\u021biile sunt recomandate s\u0103 foloseasc\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a> \u00een schimb. Dac\u0103 un mod neautentificat <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a> este necesar, poate fi folosit <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> \u00een schimb.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa\/\">crypto\/ecdsa<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa#PrivateKey.Sign\">PrivateKey.Sign<\/a> creeaz\u0103 acum o semn\u0103tur\u0103 determinist\u0103 conform <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6979.html\">RFC 6979<\/a>, dac\u0103 sursa de aleatorietate este nil.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/md5\/\">crypto\/md5<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Valoarea returnat\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/md5#New\">md5.New<\/a>, implementaz\u0103 acum \u0219i interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand\/\">crypto\/rand<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Func\u021bia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Read\">Citire<\/a> garan\u021bia absen\u021bei e\u0219ecurilor. Dac\u0103 Read \u00eent\u00e2lne\u0219te o eroare \u00een timpul citirii <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Reader\">Reader<\/a>, programul va ie\u0219i abrupt. V\u0103 rug\u0103m s\u0103 re\u021bine\u021bi c\u0103 Reader-ul implicit este documentat s\u0103 func\u021bioneze \u00eentotdeauna cu succes, a\u0219a c\u0103 aceast\u0103 modificare ar trebui s\u0103 afecteze doar acele programe care supra\u00eenc\u0103rc\u0103 variabila Reader. O excep\u021bie este nucleele Linux \u00eenainte de versiunea 3.17, unde Reader-ul implicit \u00eenc\u0103 deschide \/dev\/urandom \u0219i poate e\u0219ua.<\/p>\n<p><\/noindex> <\/p>\n<p>Pe Linux 6.11 \u0219i versiunile ulterioare, Reader-ul acum utilizeaz\u0103 apelul de sistem getrandom prin vDSO. Aceasta este de c\u00e2teva ori mai rapid\u0103, de obicei pentru citiri mici.<\/p>\n<p>Pe OpenBSD Reader-ul acum folose\u0219te arc4random_buf(3).<\/p>\n<p> <noindex><\/p>\n<p>Nou\u0103 func\u021bie <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Text\">Text<\/a> acum poate genera \u0219iruri de texte criptografice sigure.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa\/\">crypto\/rsa<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> acum returneaz\u0103 o eroare dac\u0103 se solicit\u0103 o cheie de lungime mai mic\u0103 de 1024 de bi\u021bi. Toate metodele Sign, Verify, Encrypt \u0219i Decrypt returneaz\u0103 acum o eroare dac\u0103 sunt folosite cu o cheie de dimensiune mai mic\u0103 de 1024 de bi\u021bi. Astfel de chei sunt nesigure \u0219i nu ar trebui folosite. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Setarea GODEBUG<\/a> rsa1024min=0 restaureaz\u0103 comportamentul vechi, dar dezvoltatorii Go recomand\u0103 s\u0103 se fac\u0103 acest lucru doar \u00een cazul \u00een care este necesar \u0219i doar \u00een teste, de exemplu, ad\u0103ug\u00e2nd linia \/\/go:debug rsa1024min=0 \u00een fi\u0219ierul de test. Nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#example-GenerateKey-TestKey\">exemplu<\/a> GenerateKey ofer\u0103 o cheie de test standard de 2024 de bi\u021bi, u\u0219or de utilizat.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Acum este sigur \u0219i mai eficient s\u0103 apel\u0103m <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precompute\">PrivateKey.Precompute<\/a> la <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Validate\">PrivateKey.Validate<\/a>. Precompute este acum mai rapid \u00een prezen\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrecomputedValues\">PrecomputedValues<\/a>, de exemplu, c\u00e2nd se extrage o cheie din JSON.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Pachetul acum respinge mai multe chei incorecte, chiar \u0219i atunci c\u00e2nd Validate nu este apelat, \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> acum poate returna noi erori pentru surse de aleatoritate defectuoase. C\u00e2mpurile <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Primes\">Primes<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precomputed\">Precomputed<\/a> al structurii <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey\">PrivateKey<\/a> sunt acum utilizate \u0219i validate chiar \u0219i c\u00e2nd unele valori lipsesc. De asemenea, s-au f\u0103cut modific\u0103ri \u00een crypto\/x509 pentru analiza \u0219i extragerea cheilor RSA, descrise mai jos.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#SignPKCS1v15\">SignPKCS1v15<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#VerifyPKCS1v15\">VerifyPKCS1v15<\/a> acum suport\u0103 SHA-512\/224, SHA-512\/256 \u0219i SHA-3.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> acum utilizeaz\u0103 o metod\u0103 u\u0219or diferit\u0103 pentru generarea exponentului privat (func\u021bia Carmichael \u00een loc de func\u021bia Euler). Aplica\u021biile rare, care recreeaz\u0103 cheile numai din numere prime, pot produce rezultate diferite, dar compatibile.<\/p>\n<p><\/noindex> <\/p>\n<p>Opera\u021biile asupra cheilor publice \u0219i private sunt acum de dou\u0103 ori mai rapide pe wasm.<\/p>\n<h3>crypto\/sha*<\/h3>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha1\/\">crypto\/sha1<\/a>: valoarea returnat\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha1#New\">sha1.New<\/a> acum implementeaz\u0103 \u0219i interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha256\/\">crypto\/sha256<\/a>: valorile returnate <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New\">sha256.New<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New224\">sha256.New224<\/a> acum implementeaz\u0103 \u0219i interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha512\/\">crypto\/sha512<\/a>: valorile returnate <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New\">sha512.New<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New384\">sha512.New384<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_224\">sha512.New512_224<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_256\">sha512.New512_256<\/a>, acum implementeaz\u0103 \u0219i interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle\/\">crypto\/subtle<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nou\u0103 func\u021bie <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#WithDataIndependentTiming\">WithDataIndependentTiming<\/a> permite utilizatorului s\u0103 execute func\u021bii cu func\u021bii specifice arhitecturii, care garanteaz\u0103 stabilitatea anumitor instruc\u021biuni \u00een raport cu timpul valorii datelor. Acest lucru poate fi utilizat pentru a se asigura c\u0103 codul creat pentru a func\u021biona \u00eentr-un timp constant nu a fost optimizat prin func\u021bii la nivel de procesor astfel \u00eenc\u00e2t s\u0103 func\u021bioneze \u00eentr-un timp variabil. \u00cen prezent, WithDataIndependentTiming folose\u0219te bitul PSTATE.DIT pe arm64 \u0219i nu face nimic pe celelalte arhitecturi. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Setarea GODEBUG<\/a> dataindependenttiming=1 activeaz\u0103 modul DIT pentru \u00eentreaga aplica\u021bie Go.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Ie\u0219ire <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#XORBytes\">XORBytes<\/a> trebuie s\u0103 se suprapun\u0103 complet sau deloc cu intrarea. Comportamentul anterioar\u0103 era nedefinit \u00een alt mod, \u00een timp ce acum XORBytes va panic.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls\/\">crypto\/tls<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Serverul TLS acum suport\u0103 Encrypted Client Hello (ECH). Aceast\u0103 func\u021bionalitate poate fi activat\u0103 prin completarea c\u00e2mpului <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.EncryptedClientHelloKeys\">Config.EncryptedClientHelloKeys<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Un nou mecanism de schimb de chei post-cuantice <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#X25519MLKEM768\">X25519MLKEM768<\/a> este acum suportat \u0219i activat implicit c\u00e2nd <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> este nil. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Setarea GODEBUG<\/a> tlsmlkem=0 returneaz\u0103 valoarea implicit\u0103.<\/p>\n<p><\/noindex> <\/p>\n<p>Suportul pentru schimbul de chei experimental X25519Kyber768Draft00 a fost eliminat.<\/p>\n<p> <noindex><\/p>\n<p>Ordinea schimbului de chei este acum complet gestionat\u0103 de pachetul crypto\/tls. Ordinea <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> este acum ignorat\u0103, iar con\u021binutul este folosit doar pentru a determina ce schimburi de chei s\u0103 fie incluse c\u00e2nd c\u00e2mpul este completat.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Un nou c\u00e2mp <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#ClientHelloInfo.Extensions\">ClientHelloInfo.Extensions<\/a> enumer\u0103 lista de identificatori de extensii primite \u00een mesajul Client Hello. Acest lucru poate fi util pentru a crea amprente SSL.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509\/\">crypto\/x509<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Setarea GODEBUG<\/a> x509sha1 a fost eliminat. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certficicate.Verify<\/a> nu mai suport\u0103 semn\u0103turile bazate pe SHA-1.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OID<\/a> acum implementeaz\u0103 interfe\u021bele <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>C\u00e2mpul implicit al politicilor certificate a fost schimbat din <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.PolicyIdentifiers\">Certificate.PolicyIdentifiers<\/a> pe <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Policies\">Certificate.Policies<\/a>. La analizarea certificatelor, ambele c\u00e2mpuri vor fi completate, dar la crearea politicilor certificate vor fi preluate din c\u00e2mpul Certificate.Policies \u00een loc de Certificate.PolicyIdentifiers. Aceast\u0103 modificare poate fi revertit\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">prin configurarea GODEBUG<\/a> x509usepolicies=0.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#CreateCertificate\">CreateCertificate<\/a> acum va genera un num\u0103r serial folosind o metod\u0103 compatibil\u0103 cu RFC 5280 atunci c\u00e2nd c\u00e2mpul este <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.SerialNumber\">Certificate.SerialNumber<\/a> nil, \u00een loc de a e\u0219ua.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a> acum suport\u0103 validarea politicii, a\u0219a cum este definit \u00een RFC 5280 \u0219i RFC 9618. Un nou c\u00e2mp <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#VerifyOptions.CertificatePolicies\">VerifyOptions.CertificatePolicies<\/a> poate fi setat la un set acceptabil de politici <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OIDs<\/a>. Doar lan\u021burile de certificate cu grafice valide ale politicilor vor fi returnate din <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS8PrivateKey\">MarshalPKCS8PrivateKey<\/a> acum returneaz\u0103 o eroare \u00een loc s\u0103 extrag\u0103 cheia RSA incorect\u0103. (<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS1PrivateKey\">MarshalPKCS1PrivateKey<\/a> nu returneaz\u0103 o eroare \u0219i comportamentul s\u0103u la cheile gre\u0219ite furnizate r\u0103m\u00e2ne nedefinit.)<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS1PrivateKey\">ParsePKCS1PrivateKey<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS8PrivateKey\">ParsePKCS8PrivateKey<\/a> acum utilizeaz\u0103 \u0219i valideaz\u0103 valorile codificate CRT, astfel \u00eenc\u00e2t pot respinge cheile RSA incorecte care au fost acceptate anterior. Utilizarea <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">set\u0103rilor GODEBUG<\/a> x509rsacrt=0 revine la recalcularea valorilor CRT.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\/\">debug\/elf<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pachet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\">debug\/elf<\/a> adaug\u0103 suport pentru procesarea versiunilor simbolurilor \u00een fi\u0219ierele dinamice ELF (Executable and Linkable Format). Noua metod\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersions\">File.DynamicVersions<\/a> returneaz\u0103 o list\u0103 a versiunilor dinamice definite \u00een fi\u0219ierul ELF. Noua metod\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersionNeeds\">File.DynamicVersionNeeds<\/a> returneaz\u0103 o list\u0103 a versiunilor dinamice necesare acestui fi\u0219ier ELF, care sunt definite \u00een alte obiecte ELF. \u00cen cele din urm\u0103, noile c\u00e2mpuri <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.HasVersion<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.VersionIndex<\/a> indic\u0103 versiunea simbolului.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/\">encoding<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Dou\u0103 noi interfe\u021be <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">TextAppender<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">BinaryAppender<\/a> au fost introduse pentru a ad\u0103uga o reprezentare text sau binar\u0103 a obiectului \u00een felia de octe\u021bi. Aceste interfe\u021be ofer\u0103 aceea\u0219i func\u021bionalitate ca \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextMarshaler\">TextMarshaler<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryMarshaler\">BinaryMarshaler<\/a>, dar \u00een loc s\u0103 aloce o nou\u0103 felie de fiecare dat\u0103, adaug\u0103 datele direct \u00een felia existent\u0103. Aceste interfe\u021be sunt acum implementate de tipurile din biblioteca standard care implementeaz\u0103 deja TextMarshaler \u0219i\/sau BinaryMarshaler.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json\/\">encoding\/json<\/a><\/h4>\n<p> <noindex><\/p>\n<p>\u00cen timpul construirii, c\u00e2mpul structurii cu noua op\u021biune omitzero \u00een eticheta c\u00e2mpului structurii va fi omis dac\u0103 valoarea sa este zero. Dac\u0103 tipul c\u00e2mpului are metoda IsZero() bool, va fi utilizat\u0103 pentru a determina dac\u0103 valoarea este zero. \u00cen caz contrar, valoarea va fi zero dac\u0103 este <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#The_zero_value\">valoarea zero pentru tipul s\u0103u<\/a>. Eticheta c\u00e2mpului omitzero este mai curat\u0103 \u0219i mai pu\u021bin predispus\u0103 la erori dec\u00e2t omitempty, atunci c\u00e2nd inten\u021bia este de a omite valorile zero. \u00cen particular, spre deosebire de omitempty, omitzero omite valorile zero <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">time.Time<\/a> , care reprezint\u0103 o surs\u0103 frecvent\u0103 de probleme.<\/p>\n<p><\/noindex> <\/p>\n<p>Dac\u0103 sunt specificate ambele omitempty \u0219i omitzero, c\u00e2mpul va fi omis dac\u0103 valoarea este goal\u0103 sau zero (sau ambele simultan).<\/p>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json#UnmarshalTypeError.Field\">UnmarshalTypeError.Field<\/a> acum include structuri \u00eencorporate pentru a oferi mesaje de eroare mai detaliate.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types\/\">go\/types<\/a><\/h4>\n<p>Toate structurile de date go\/types, care dezv\u0103luie secven\u021be de perechi de metode, cum ar fi Len() int \u0219i At(int) T, au acum \u0219i metode care returneaz\u0103 iteratoare, facilit\u00e2nd astfel scrierea de cod similar cu acesta:<\/p>\n<p> params := fn.Type.(*types.Signature).Params() for i := 0; i &lt; params.Len(); i++ {   use(params.At(i)) }   <\/p>\n<p>Pentru acesta:<\/p>\n<p> for param := range fn.Signature().Params().Variables() {   use(param) }   <noindex><\/p>\n<p>Metode: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.EmbeddedTypes\">Interface.EmbeddedTypes<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.ExplicitMethods\">Interface.ExplicitMethods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.Methods\">Interface.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#MethodSet.Methods\">MethodSet.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Named.Methods\">Named.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Scope.Children\">Scope.Children<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Struct.Fields\">Struct.Fields<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Tuple.Variables\">Tuple.Variables<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#TypeList.Types\">TypeList.Types<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#TypeParamList.TypeParams\">TypeParamList.TypeParams<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Union.Terms\">Union.Terms<\/a><\/p>\n<p><\/noindex> <\/p>\n<h4>hash\/*<\/h4>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32\/\">hash\/adler32<\/a>: valoarea returnat\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32#New\">Nou<\/a>, implementaz\u0103 acum \u0219i interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32\/\">hash\/crc32<\/a>: valorile returnate <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#New\">Nou<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#NewIEEE\">NewIEEE<\/a>, acum implementeaz\u0103 \u0219i interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64\/\">hash\/crc64<\/a>: valoarea returnat\u0103 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64#New\">Nou<\/a>, implementaz\u0103 acum \u0219i interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv\/\">hash\/fnv<\/a>: valorile returnate <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New32\">New32<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New32a\">New32a<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New64\">New64<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New64a\">New64a<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128\">New128<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128a\">New128a<\/a>, acum implementeaz\u0103 \u0219i interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash\/\">hash\/maphash<\/a>: func\u021bii noi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#Comparable\">Comparable<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#WriteComparable\">WriteComparable<\/a> pot calcula hash-ul oric\u0103rei valori care poate fi comparat\u0103. Acest lucru permite hash-uirea a orice ce poate fi folosit ca \u0219i cheie pentru un dic\u021bionar Go.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog\/\">log\/slog<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Un nou <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#DiscardHandler\">DiscardHandler<\/a> este un handler care nu este niciodat\u0103 activat \u0219i \u00eentotdeauna \u00ee\u0219i elimin\u0103 ie\u0219irea.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#Level\">Level<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#LevelVar\">LevelVar<\/a> implementaz\u0103 acum interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4>math\/*<\/h4>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big\/\">math\/big<\/a>: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Float\">Float<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Int\">Int<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Rat\">Rat<\/a> implementaz\u0103 acum interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/\">math\/rand<\/a>: apelurile func\u021biei de nivel superior fiind desuete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand#Seed\">Seed<\/a> nu mai au niciun efect. Pentru a restaura comportamentul vechi, se poate folosi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">setarea GODEBUG<\/a> randseednop=0. Mai multe detalii \u00een <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67273\">propunerea 67273<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2\/\">math\/rand\/v2<\/a>: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#ChaCha8\">ChaCha8<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#PCG\">PCG<\/a> implementaz\u0103 acum interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/\">net<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#ListenConfig\">ListenCondig<\/a> folose\u0219te acum MPTCP implicit pe sistemele unde este suportat (p\u00e2n\u0103 acum doar Linux).<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#IP\">IP<\/a> implementaz\u0103 acum interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/\">net\/http<\/a><\/h4>\n<p> <noindex><\/p>\n<p>S-a schimbat restric\u021bia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> asupra r\u0103spunsurilor de informa\u021bie 1xx \u00een r\u0103spuns la cerere. Anterior, acesta oprea cererea \u0219i returna o eroare dup\u0103 primirea a mai mult de 5 r\u0103spunsuri 1xx. Acum returneaz\u0103 o eroare doar dac\u0103 dimensiunea total\u0103 a tuturor r\u0103spunsurilor 1xx dep\u0103\u0219e\u0219te setarea de configurare <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.MaxResponseHeaderBytes\">Transport.MaxResponseHeaderBytes<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>\u00cen plus, c\u00e2nd cererea are un hook pentru urm\u0103rire <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/httptrace#ClientTrace.Got1xxResponse\">net\/http\/httptrace.ClientTrace.Got1xxResponse<\/a>, nu mai exist\u0103 o restric\u021bie asupra num\u0103rului total de r\u0103spunsuri 1xx. Hook-ul Got1xxResponse poate returna o eroare pentru a opri cererea.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server\">Server<\/a> au acum un c\u00e2mp HTTP2, care permite configurarea set\u0103rilor protocolului HTTP\/2.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Campurile noi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> ofer\u0103 o modalitate simpl\u0103 de a configura ce protocoale folose\u0219te serverul sau clientul HTTP.<\/p>\n<p><\/noindex> <\/p>\n<p>Serverul \u0219i clientul pot fi configura\u021bi pentru a suporta conexiuni necriptate HTTP\/2.<\/p>\n<p> <noindex><\/p>\n<p>C\u00e2nd <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> con\u021bine UnencrypterHTTP2, serverul va accepta conexiuni HTTP\/2 pe porturi necriptate. Serverul poate accepta simultan HTTP\/1 \u0219i HTTP\/2 necriptat pe acela\u0219i port.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>C\u00e2nd <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> con\u021bine UnencryptedHTTP2 \u0219i nu con\u021bine HTTP1, transportul va folosi HTTP\/2 necriptat pentru adresele <a rel=\"nofollow\" href=\"http:\/\/.\">http:\/\/.<\/a> Dac\u0103 transportul este configurat s\u0103 utilizeze at\u00e2t HTTP\/1, c\u00e2t \u0219i HTTP\/2 necriptat, va folosi HTTP\/1.<\/p>\n<p><\/noindex> <\/p>\n<p>Suportul pentru HTTP\/2 necriptat utilizeaz\u0103 \"HTTP\/2 cu cunoa\u0219tere prealabil\u0103\" (RFC 9113, sec\u021biunea 3.3). Antetul dep\u0103\u0219it \u201eUpgrade: h2c\u201d nu este acceptat.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip\/\">net\/netip<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Addr\">Addr<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#AddrPort\">AddrPort<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Prefix\">Prefix<\/a> acum implementeaz\u0103 interfe\u021bele <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/url\/\">net\/url<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/url#URL\">URL<\/a> acum implementeaz\u0103 \u0219i interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user\/\">os\/user<\/a><\/h4>\n<p> <noindex><\/p>\n<p>\u00cen Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Current<\/a> poate fi utilizat acum \u00een Windows Nano Server. Implementarea a fost actualizat\u0103 pentru a evita utilizarea func\u021biilor din biblioteca NetApi32, care nu este prezent\u0103 \u00een Nano Server.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>\u00cen Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Current<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Lookup\">Lookup<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#LookupId\">LookupId<\/a> sprijin\u0103 acum urm\u0103toarele conturi de serviciu \u00eencorporate ale utilizatorului:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>NT AUTHORITYSYSTEM<\/li>\n<li>NT AUTHORITYLOCAL SERVICE<\/li>\n<li>NT AUTHORITYNETWORK SERVICE<\/li>\n<\/ul>\n<p> <noindex><\/p>\n<p>\u00cen Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Current<\/a> a fost semnificativ \u00eembun\u0103t\u0103\u021bit\u0103 c\u00e2nd utilizatorul curent este conectat la un domeniu lent, ceea ce este frecvent pentru mul\u021bi utilizatori corporate. Noua performan\u021b\u0103 a implement\u0103rii este acum de ordinul milisecundelor, comparativ cu implementarea anterioar\u0103, care putea dura c\u00e2teva secunde, chiar minute, pentru a termina.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>\u00cen Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Current<\/a> returneaz\u0103 acum utilizatorul proprietar al procesului, c\u00e2nd firul curent se prezint\u0103 ca alt utilizator. Anterior, aceasta returna o eroare.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/regexp\/\">regexp<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/regexp#Regexp\">Regexp<\/a> implementaz\u0103 acum interfa\u021ba <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAdapter<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/\">runtime<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Func\u021bia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#GOROOT\">GOROOT<\/a> a fost declarat\u0103 acum ca fiind \u00eenvechit\u0103. \u00cen noul cod, ar trebui s\u0103 se prefere utilizarea c\u0103ii sistemului pentru a determina binarul \u201ego\u201d \u0219i s\u0103 se foloseasc\u0103 go env GOROOT pentru a determina GOROOT.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\/\">strings<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pachet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\">strings<\/a> adaug\u0103 mai multe func\u021bii pentru a lucra cu iteratoarele:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#Lines\">Lines<\/a> returneaz\u0103 un iterator pe linile desp\u0103r\u021bite prin nou\u0103 linii \u00een \u0219ir.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitSeq\">SplitSeq<\/a> returneaz\u0103 un iterator pe toate substraturile \u0219irului, desp\u0103r\u021bite de separator.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitAfterSeq\">SplitAfterSeq<\/a> returneaz\u0103 un iterator pe substraturi ale \u0219irului, desp\u0103r\u021bit dup\u0103 fiecare apari\u021bie a separatorului.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsSeq\">FieldsSeq<\/a> returneaz\u0103 un iterator pe substraturi ale \u0219irului \u00een jurul secven\u021belor de caractere spa\u021biu, a\u0219a cum sunt definite<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unicode#IsSpace\">unicode.IsSpace<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsFuncSeq\">FieldsFuncSeq<\/a> returneaz\u0103 un iterator pe substraturi ale \u0219irului \u00een jurul secven\u021belor de puncte de cod unicode care \u00eendeplinesc predicatul.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync\/\">sync<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Implementarea <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync#Map\">sync.Map<\/a> a fost modificat\u0103, \u00eembun\u0103t\u0103\u021bind performan\u021ba, \u00een special pentru modific\u0103rile dic\u021bionarului. De exemplu, este mai pu\u021bin probabil ca modific\u0103rile seturilor neintersectante s\u0103 concureze pe dic\u021bionare mari, iar timpul de cre\u0219tere necesar pentru realizarea de la un dic\u021bionar cu \u00eenc\u0103rcare de competi\u021bie sc\u0103zut\u0103 nu mai este necesar.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Dac\u0103 \u00eent\u00e2lni\u021bi probleme, seta\u021bi GOEXPERIMENT=nosynchashtriemap \u00een timpul compil\u0103rii pentru a reveni la implementarea veche \u0219i, v\u0103 rug\u0103m, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/new\">completa\u021bi formularul de problem\u0103<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/\">testing<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Metode noi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Context\">T.Context<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Context\">B.Context<\/a> returneaz\u0103 contextul, care este anulat dup\u0103 finalizarea testului \u0219i \u00eenainte de execu\u021bia func\u021biilor de cur\u0103\u021bare a testului.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Metode noi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Chdir\">T.Chdir<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Chdir\">B.Chdir<\/a> pot fi utilizate pentru a schimba directorul de lucru pe perioada execu\u021biei testului sau benchmark-ului.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/text\/template\/\">text\/template<\/a><\/h4>\n<p>Modelele suport\u0103 acum range-over-func \u0219i range-over-int.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\/\">time<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">Timp<\/a> acum implementeaz\u0103 interfe\u021bele <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> \u0219i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Porturi<\/h2>\n<h3>Linux<\/h3>\n<p> <noindex><\/p>\n<p>Cum a fost <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23#linux\">anun\u021bat<\/a> \u00een notele de lansare Go 1.23, Go 1.24 necesit\u0103 kernel Linux versiunea 3.2 sau mai recent.<\/p>\n<p><\/noindex> <\/p>\n<h3>Darwin<\/h3>\n<p>Go 1.24 este ultima versiune care va func\u021biona pe macOS 11 Big Sur. Go 1.25 va necesita macOS 12 Monterey sau mai recent.<\/p>\n<h3>WebAssembly<\/h3>\n<p>Directiva de compilare go:wasmexport a fost ad\u0103ugat\u0103 \u00een programele Go pentru a exporta func\u021bii \u00een gazda WebAssembly.<\/p>\n<p> <noindex><\/p>\n<p>\u00cen WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 suport\u0103 compilarea programului Go ca <a rel=\"nofollow\" href=\"https:\/\/github.com\/WebAssembly\/WASI\/blob\/63a46f61052a21bfab75a76558485cf097c0dbba\/legacy\/application-abi.md#current-unstable-abi\">reactor\/library<\/a> prin specificarea flag-ului de compilare -buildmode=c-shared.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Mai multe tipuri sunt acum permise ca tip de argument sau rezultat pentru func\u021biile go:wasmimport. \u00cen special, bool, string, uintptr \u0219i pointere c\u0103tre tipuri specifice sunt permise (detalii pot fi g\u0103site \u00een <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/compile#hdr-WebAssembly_Directives\">documentation<\/a>), \u00eempreun\u0103 cu tipuri \u00eentregi de 32 de bi\u021bi \u0219i 64 de bi\u021bi \u0219i tipuri float, \u0219i unsafe.Pointer, care sunt deja permise. Aceste tipuri sunt, de asemenea, permise ca tipuri de argument sau rezultat pentru func\u021biile go:wasmexport.<\/p>\n<p><\/noindex> <\/p>\n<p>Fi\u0219ierele de suport pentru WebAssembly au fost mutate \u00een lib\/wasm din misc\/wasm.<\/p>\n<p>Dimensiunea ini\u021bial\u0103 a memoriei a fost semnificativ redus\u0103, mai ales pentru aplica\u021biile mici WebAssembly.<\/p>\n<h3>Windows<\/h3>\n<p> <noindex><\/p>\n<p>Portul de 32 de bi\u021bi windows\/arm (GOOS=windows GOARCH=arm) a fost marcat ca fiind defect. Detalii \u00een <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/70705\">#70705<\/a><\/p>\n<p><\/noindex><\/p>\n<p>Sursa: <a \ncontent=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/news\/development\/17884044\">linux.org.ru<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u043e\u0432\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a \u044f\u0437\u044b\u043a\u0430 Go, \u0432\u0435\u0440\u0441\u0438\u044f 1.24, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0441\u043f\u0443\u0441\u0442\u044f \u0448\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u043e\u0441\u043b\u0435 Go 1.23. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430, \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u0440\u0435\u043b\u0438\u0437 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 Go 1. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043e\u0436\u0438\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Go \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u0435\u0436\u0434\u0435. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u044f\u0437\u044b\u043a\u0435 Go 1.24 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0430\u043b\u0438\u0430\u0441\u044b \u0442\u0438\u043f\u043e\u0432: \u0430\u043b\u0438\u0430\u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":121951,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-121950","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/news\/go-1-24\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Go 1.24 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/news\/go-1-24\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2025-02-15T12:22:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-02-15T12:22:29+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Go 1.24 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/go-1-24","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Go 1.24 | ProHoster","og:url":"https:\/\/prohoster.info\/ro\/blog\/news\/go-1-24","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2025-02-15T12:22:29+00:00","article:modified_time":"2025-02-15T12:22:29+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"121950","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 10:38:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2026-01-23 10:38:20","updated":"2026-01-23 10:38:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/121950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=121950"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/121950\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/121951"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=121950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=121950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=121950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}