{"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\/it\/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>Nuova edizione del linguaggio Go, versione 1.24, dopo sei mesi da <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23\">Go 1.23<\/a>. La maggior parte delle modifiche riguardano l'implementazione della toolchain, del runtime e delle librerie. Come sempre, il rilascio garantisce <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1compat\">la promessa di compatibilit\u00e0<\/a> per Go 1. Gli sviluppatori del linguaggio si aspettano che quasi tutti i programmi Go continuino a compilarsi e funzionare come prima.<\/p>\n<p><\/noindex><\/noindex>  <\/p>\n<h2>Modifiche al linguaggio<\/h2>\n<p> <noindex><\/p>\n<p>Go 1.24 ora supporta completamente <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/46477\">gli alias generici di tipo<\/a>: un alias di tipo pu\u00f2 essere parametrizzato come un tipo dichiarato. Maggiori dettagli nella <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#Alias_declarations\">specifica del linguaggio<\/a>. Tuttavia, questa possibilit\u00e0 pu\u00f2 essere disabilitata impostando GOEXPERIMENT=noaliastypeparams; tuttavia, l'opzione aliastypeparams sar\u00e0 rimossa in Go 1.25.<\/p>\n<p><\/noindex> <\/p>\n<h2>Strumenti<\/h2>\n<h3>Il comando go<\/h3>\n<p> <noindex><\/p>\n<p>I moduli go ora possono monitorare le dipendenze eseguibili utilizzando la direttiva tool in go.mod. Questo elimina la necessit\u00e0 della precedente soluzione di lavoro che prevedeva di aggiungere strumenti come importazioni vuote nel file, solitamente chiamato \u201ctools.go\u201d. Il comando go tool ora pu\u00f2 eseguire questi strumenti oltre agli strumenti forniti con Go. Maggiori informazioni possono essere trovate in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/modules\/managing-dependencies#tools\">documentazione<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Il nuovo flag -tool per go get porta all'aggiunta della direttiva dello strumento nel modulo attuale per i pacchetti specificati, oltre ad aggiungere direttive di dipendenza.<\/p>\n<p> <noindex><\/p>\n<p>Nuovo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go#hdr-Package_lists_and_patterns\">meta-pattern tool<\/a> fa riferimento a tutti gli strumenti nel modulo attuale. Questo pu\u00f2 essere utilizzato per aggiornarli tutti tramite go get tool o per installarli nella directory GOBIN tramite go install tool.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>I file eseguibili creati tramite go run e il nuovo comportamento di go tool ora vengono memorizzati nella cache della build di Go. Questo rende le esecuzioni ripetute pi\u00f9 veloci grazie a un cache maggiore. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/69290\">#69290<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>I comandi go build e go install ora accettano il flag -json, che restituisce output e errori di compilazione come output strutturato JSON in standard output. I dettagli del formato possono essere trovati in go help buildjson.<\/p>\n<p> <noindex><\/p>\n<p>Inoltre, go test -json ora riporta output e errori di compilazione in JSON, mescolati con il JSON del risultato del test. Possono essere distinti per i nuovi tipi di action, ma se causano problemi nel sistema di integrazione dei test, \u00e8 possibile tornare all'output testuale della build tramite <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">la configurazione GODEBUG<\/a> gotestjsonbuildtext=1.<\/p>\n<p><\/noindex> <\/p>\n<p>La nuova variabile d'ambiente GOAUTH fornisce un modo flessibile per autorizzare il download privato dei moduli. Maggiori dettagli possono essere trovati in go help goauth.<\/p>\n<p> <noindex><\/p>\n<p>Il comando go build ora imposta <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/debug#BuildInfo.Main\">la versione del modulo principale<\/a> nel binario compilato, basandosi sul tag e\/o sul commit del sistema di controllo versione. Il suffisso +dirty verr\u00e0 aggiunto in caso di modifiche non committate. Si pu\u00f2 utilizzare il flag -buildvcs=false per escludere le informazioni di controllo versione dal binario.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuova <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configurazione GODEBUG<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/toolchain#select\">toolchaintrace=1<\/a> ora pu\u00f2 essere utilizzata per monitorare il processo di selezione della toolchain nel comando go.<\/p>\n<p><\/noindex> <\/p>\n<h3>Cgo<\/h3>\n<p> <noindex><\/p>\n<p>Cgo supporta nuove annotazioni per le funzioni C per migliorare le prestazioni in fase di esecuzione. #cgo noescape cFunctionName dice al compilatore che la memoria passata alla funzione C cFunctionName non va persa. #cgo nocallback cFunctionName dice al compilatore che la funzione C cFunctionName non richiama alcuna funzione Go. Maggiori informazioni possono essere trovate nella <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/cgo#hdr-Optimizing_calls_of_C_code\">documentazione cgo<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Cgo al momento rifiuta chiamate compilate a funzioni C che hanno dichiarazioni incompatibili. Ad esempio, se f \u00e8 dichiarata come sia void f(int) che void f(double), cgo riporter\u00e0 un errore invece di generare una sequenza di chiamate errata per f(0). Una novit\u00e0 in questa versione \u00e8 il miglioramento della rilevazione di questa condizione di errore quando dichiarazioni incompatibili appaiono in file diversi. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67699\">#67699<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Objdump<\/h3>\n<p>Lo strumento objdump ora supporta la disassemblazione su LoongArch a 64 bit (GOARCH=loong64), RISC-V (GOARCH=riscv64) e S390X (GOARCH=s390x).<\/p>\n<h3>Vet<\/h3>\n<p>Il nuovo analizzatore tests segnala errori comuni nelle dichiarazioni di test, fuzzers, benchmark e esempi nei pacchetti di test, come nomi malformati, firme errate o esempi che documentano identificatori inesistenti. Alcuni di questi errori possono causare il fallimento dei test.<\/p>\n<p> <noindex><\/p>\n<p>L'attuale analizzatore printf ora segnala diagnosi di chiamate nella forma fmt.Printf(s), dove s \u00e8 una stringa di formato non costante, senza altri argomenti. Queste chiamate sono quasi sempre un errore, poich\u00e9 il valore di s pu\u00f2 contenere il simbolo %; usa invece fmt.Print. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/60529\">60529<\/a>. Questo controllo tende a fare rilevamenti nel codice esistente, e quindi viene applicato solo quando la versione del linguaggio (come specificato dalla direttiva go del file go.mod o dai commenti `\/\/go:build) \u00e8 almeno Go 1.24, per evitare di causare guasti all'integrazione continua durante l'aggiornamento alla toolchain Go 1.24.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>L'analizzatore buildtag esistente ora riporta diagnostiche quando c'\u00e8 un errore <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/go#hdr-Build_constraints\">di restrizione della versione di build precedente<\/a> Go nella direttiva \/\/go:build. Ad esempio, \/\/go:build go1.23.1 si riferisce a un release patch; invece usa \/\/go:build go1.23. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/64127\">#64127<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>L'analizzatore copylock esistente ora riporta diagnostiche quando una variabile, dichiarata in un ciclo 'for' triplo, come for i := iter(); done(i); i = next(i) { ... }, contiene un sync.Locker, come sync.Mutex. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#language\">Go 1.22<\/a> ha cambiato il comportamento di tali cicli per creare una nuova variabile per ogni iterazione, copiando i valori dalla iterazione precedente; questa copia non \u00e8 sicura per i lock. <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>Il binario interno cmd\/go e il meccanismo di caching dei test possono ora essere implementati in processi secondari, implementando un protocollo JSON tra lo strumento cmd\/go e il processo secondario nominato dalla variabile d'ambiente GOCACHEPROG. In precedenza era per GOEXPERIMENT. I dettagli del protocollo possono essere visti in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go\/internal\/cacheprog\">documentazione<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Tempo di esecuzione<\/h2>\n<p> <noindex><\/p>\n<p>Diverse migliorie nelle prestazioni a runtime hanno ridotto le spese per la CPU del 2-3% in media su un set di benchmark rappresentativi. I risultati possono variare a seconda dell'applicazione. Queste miglior\u00ece includono una nuova implementazione incorporata di map basata su <a rel=\"nofollow\" href=\"https:\/\/abseil.io\/about\/design\/swisstables\">Tabelle Svedesi<\/a>, allocazione di memoria pi\u00f9 efficiente per piccoli oggetti e una nuova implementazione interna del mutex a runtime.<\/p>\n<p><\/noindex> <\/p>\n<p>La nuova implementazione di map incorporata e il nuovo mutex interno a runtime possono essere disabilitati con le impostazioni GOEXPERIMENT=noswissmap e GOEXPERIMENT=nospinbitmutex durante la build, rispettivamente.<\/p>\n<h2>Compilatore<\/h2>\n<p>Il compilatore ha gi\u00e0 vietato la definizione di nuovi metodi con tipi di ricevitori generati da cgo, ma era possibile aggirare questa restrizione attraverso un alias di tipo. Go 1.24 ora genera sempre un errore se il ricevitore denota un tipo cgo generato, direttamente o indirettamente (attraverso un alias di tipo).<\/p>\n<h2>Linker<\/h2>\n<p>Il linker ora genera un identificativo di build GNU (record ELF NT_GNU_BUILD_ID) sulle piattaforme ELF e UUID (comando di caricamento Mach-O LC_UUID) su macOS per impostazione predefinita. L'identificativo di build o UUID viene derivato dall'identificativo di build di Go. Questo pu\u00f2 essere disattivato con il flag del linker -B none, oppure sovrascritto con il flag del linker -B 0xNNNN con un valore esadecimale fornito dall'utente.<\/p>\n<h2>Rollout<\/h2>\n<p> <noindex><\/p>\n<p>Come indicato in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#bootstrap\">note di rilascio di Go 1.22<\/a>, Go 1.24 ora richiede Go 1.22.6 o versione successiva per l'avvio. Gli sviluppatori si aspettano che Go 1.26 richieder\u00e0 un rilascio patch di Go 1.24 o superiore per l'avvio.<\/p>\n<p><\/noindex> <\/p>\n<h2>Libreria standard<\/h2>\n<h3>Accesso al file system limitato dalla directory<\/h3>\n<p> <noindex><\/p>\n<p>Nuovo tipo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> consente di eseguire operazioni sul file system all'interno di una directory specifica.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>La funzione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#OpenRoot\">os.OpenRoot<\/a> apre una directory e restituisce <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a>. I metodi su <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> operano in questa directory e non consentono ai percorsi di fare riferimento a posizioni al di fuori della directory, comprese quelle che seguono collegamenti simbolici al di fuori della directory. I metodi su os.Root riflettono la maggior parte delle operazioni del file system disponibili nel pacchetto os, inclusi, ad esempio, <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> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Stat\">os.Root.Stat<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nuova funzione di benchmark<\/h3>\n<p> <noindex><\/p>\n<p>I benchmark possono ora utilizzare un metodo pi\u00f9 veloce e meno soggetto a errori <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Loop\">testing.B.Loop<\/a> per eseguire iterazioni del benchmark come for b.Loop() { \u2026 } invece delle tipiche strutture cicliche che coinvolgono b.N come for range b.N. Questo offre due vantaggi significativi:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>La funzione di benchmark viene eseguita esattamente una volta per ogni -count, pertanto le costose fasi di setup e cleanup vengono eseguite solo una volta.<\/li>\n<li>I parametri della funzione e i risultati rimangono vivi, impedendo al compilatore di ottimizzare completamente il corpo del ciclo.<\/li>\n<\/ul>\n<h3>Finalizzatori migliorati<\/h3>\n<p> <noindex><\/p>\n<p>La nuova funzione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#AddCleanup\">runtime.AddCleanup<\/a> \u00e8 un meccanismo di pulizia che \u00e8 pi\u00f9 flessibile, pi\u00f9 efficace e meno soggetto a errori rispetto a <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#SetFinalizer\">runtime.SetFinalizer<\/a>. AddCleanup associa una funzione di pulizia a un oggetto, che verr\u00e0 eseguita non appena l'oggetto diventa non accessibile. Tuttavia, a differenza di SetFinalizer, \u00e8 possibile associare pi\u00f9 funzioni di pulizia a un singolo oggetto, le pulizie possono essere associate a puntatori interni, le pulizie generalmente non inducono perdite quando gli oggetti formano un ciclo e le pulizie non ritardano il rilascio dell'oggetto o degli oggetti a cui si riferisce. Il codice nuovo dovrebbe preferire AddCleanup a SetFinalizer.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nuovo pacchetto weak<\/h3>\n<p> <noindex><\/p>\n<p>Nuovo pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/weak\/\">weak<\/a> fornisce puntatori deboli.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>I puntatori deboli sono un primitivo a basso livello fornito per creare strutture che utilizzano in modo efficace la memoria, come dizionari deboli per mappare valori, dizionari di canonizzazione per tutto ci\u00f2 che non \u00e8 coperto dal pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unique\/\">unique<\/a>, e vari tipi di cache. Per supportare questi casi d'uso, questa release offre anche <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/#AddCleanup\">runtime.AddCleanup<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/maphash\/#Comparable\">maphash.Comparabile<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nuovo pacchetto crypto\/mlkem<\/h3>\n<p> <noindex><\/p>\n<p>Nuovo pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/mlkem\/\">crypto\/mlkem<\/a> implementa ML-KEM-768 e ML-KEM-1024.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>ML-KEM \u00e8 un meccanismo di scambio di chiavi post-quantistico, precedentemente noto come Kyber e specificato in <a rel=\"nofollow\" href=\"https:\/\/doi.org\/10.6028\/NIST.FIPS.203\">FIPS 203<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nuovi pacchetti crypto\/hkdf, crypto\/pbkdf2 e crypto\/sha3<\/h3>\n<p> <noindex><\/p>\n<p>Nuovo pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/hkdf\/\">crypto\/hkdf<\/a> implementa la funzione di derivazione della chiave basata su HMAC \u201cExtract-and-Expand\u201d HKDF, come definito in <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5869.html\">RFC 5869<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuovo pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/pbkdf2\/\">crypto\/pbkdf2<\/a> implementa la funzione di derivazione della chiave basata su password PBKDF2, come definito in <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8018.html\">RFC 8018<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuovo pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha3\/\">crypto\/sha3<\/a> implementa la funzione hash SHA-3 e SHAKE e la funzione cSHAKE di output estensibile, come definito in <a rel=\"nofollow\" href=\"http:\/\/doi.org\/10.6028\/NIST.FIPS.202\">FIPS 202<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Tutti e tre i pacchetti sono basati su pacchetti esistenti in golang.org\/x\/crypto\/\u2026<\/p>\n<h3>Conformit\u00e0 FIPS 140-3<\/h3>\n<p> <noindex><\/p>\n<p>Questa release include <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/security\/fips140\">un nuovo insieme di meccanismi per garantire la conformit\u00e0 a FIPS 140-3<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Il modulo crittografico Go \u00e8 un insieme di pacchetti interni della libreria standard che vengono utilizzati trasparentemente per implementare gli algoritmi approvati FIPS 140-3. Le applicazioni non richiedono modifiche per utilizzare il modulo crittografico Go per gli algoritmi approvati.<\/p>\n<p> <noindex><\/p>\n<p>La nuova variabile d'ambiente GOFIPS140 pu\u00f2 essere utilizzata per scegliere la versione del modulo crittografico Go da utilizzare nella compilazione. La nuova <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configurazione GODEBUG<\/a> fips140 pu\u00f2 essere utilizzata per abilitare la modalit\u00e0 FIPS 140-3 durante l'esecuzione.<\/p>\n<p><\/noindex> <\/p>\n<p>Go 1.24 include il modulo crittografico Go versione v1.0.0, che attualmente \u00e8 in fase di test con un laboratorio CMVP accreditato.<\/p>\n<h3>Nuovo pacchetto sperimentale testing\/synctest<\/h3>\n<p> <noindex><\/p>\n<p>Nuovo pacchetto sperimentale <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/\">testing\/synctest<\/a> fornisce supporto per il test del codice concorrente.<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>La funzione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/#Run\">synctest.Run<\/a> esegue un gruppo di goroutine in un \u00abbubble\u00bb isolato. Nella bubble, le funzioni del pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\">time<\/a> operano su orologi fittizi.<\/li>\n<li>Funzioni <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest#Wait\">synctest.Wait<\/a> aspetta che tutte le goroutine si blocchino nella bubble corrente.<\/li>\n<\/ul>\n<p>I dettagli possono essere trovati nella documentazione del pacchetto.<\/p>\n<p> <noindex><\/p>\n<p>Il pacchetto synctest \u00e8 sperimentale e deve essere abilitato impostando GOEXPERIMENT=synctest. L'API del pacchetto potrebbe cambiare nelle future release. In <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67434\">#67434<\/a> si possono trovare ulteriori dettagli e fornire feedback.<\/p>\n<p><\/noindex> <\/p>\n<h3>Modifiche minori nella libreria<\/h3>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/archive\/\">archive<\/a><\/h4>\n<p>Le implementazioni (*Writer.AddFS) in archive\/zip e archive\/tar ora scrivono l'intestazione della directory per una directory vuota.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\/\">bytes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\">bytes<\/a> aggiunge diverse funzioni che lavorano con gli iteratori:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#Lines\">Lines<\/a> restituisce un iteratore su righe separate da nuove righe in uno slice di byte.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitSeq\">SplitSeq<\/a> restituisce un iteratore su tutti i sottoslici di uno slice di byte, separato da un delimitatore.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitAfterSeq\">SplitAfterSeq<\/a> restituisce un iteratore sui sottoslici di uno slice di byte, separato dopo ogni occorrenza del delimitatore.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsSeq\">FieldsSeq<\/a> restituisce un iteratore sui sottoslici di uno slice di byte attorno a sequenze di spazi, come definito <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> restituisce un iteratore sui sottoslici di uno slice di byte attorno a sequenze di punti di codice Unicode che soddisfano un predicato.<\/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>Il valore restituito <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes#NewCipher\">NewChipher<\/a> non implementa pi\u00f9 i metodi NewCTR, NewGCM, NewCBCEncrypter e NewCBCDecrypter. Questi metodi non erano documentati e non erano disponibili su tutte le architetture. Ora il valore <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Block\">Block<\/a> deve essere passato direttamente alle funzioni corrispondenti <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a>. Fino ad ora, crypto\/cipher controlla ancora questi metodi per i valori Block, anche se non sono pi\u00f9 supportati dalla libreria 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>La nuova funzione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewGCMWithRandomNonce\">NewGCMWithRandomNonce<\/a> false, se l'elemento da sostituire \u00e8 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a>, che implementa AES-GCM, generando un numero casuale monouso durante Seal e aggiungendolo all'inizio del testo crittografato.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Implementazione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a>, restituito <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> quando utilizzato con <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a> \u00e8 ora molto pi\u00f9 veloce su amd64 e 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> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBDecrypter\">NewCFBDecrypter<\/a> sono ora dichiarati obsoleti. I modi OFB e CFB non sono autenticati, il che consente in generale attacchi attivi per manipolare e recuperare il testo in chiaro. Si raccomanda alle applicazioni di utilizzare <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a> invece. Se \u00e8 necessario un modo non autenticato, si pu\u00f2 usare <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a> invece. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> crypto\/ecdsa<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa\/\">PrivateKey.Sign<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa#PrivateKey.Sign\">ora genera una firma deterministica in conformit\u00e0 con<\/a> RFC 6979 <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6979.html\">, se la sorgente di casualit\u00e0 \u00e8 nil.<\/a>crypto\/md5<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/md5\/\">md5.New<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Il valore restituito <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/md5#New\">, implementa ora anche l'interfaccia<\/a>encoding.BinaryAppender <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand\/\">Read<\/a><\/h4>\n<p> <noindex><\/p>\n<p>La funzione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Read\">ora garantisce l'assenza di fallimenti. Se Read incontra un errore durante la lettura<\/a> Reader <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Reader\">, il programma termina in modo irreversibile. Si noti che il Reader predefinito \u00e8 documentato per funzionare sempre con successo, quindi questa modifica dovrebbe riguardare solo i programmi che sovrascrivono la variabile Reader. Un'eccezione sono i kernel Linux prima della versione 3.17, dove il Reader predefinito apre ancora \/dev\/urandom e pu\u00f2 fallire.<\/a>Su Linux 6.11 e versioni successive, Reader ora utilizza la chiamata di sistema getrandom tramite vDSO. Questo \u00e8 molto pi\u00f9 veloce, in generale per letture piccole.<\/p>\n<p><\/noindex> <\/p>\n<p>Su OpenBSD Reader ora utilizza arc4random_buf(3).<\/p>\n<p>Text<\/p>\n<p> <noindex><\/p>\n<p>La nuova funzione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Text\">Testo<\/a> ora pu\u00f2 generare stringhe di testo casuali crittograficamente sicure.<\/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> ora restituisce un errore se viene richiesta una chiave di lunghezza inferiore ai 1024 bit. Tutti i metodi Sign, Verify, Encrypt e Decrypt ora restituiscono un errore se utilizzati con una chiave di dimensioni inferiori a 1024 bit. Tali chiavi non sono sicure e non devono essere utilizzate. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configurazione GODEBUG<\/a> rsa1024min=0 ripristina il comportamento precedente, ma gli sviluppatori di Go raccomandano di farlo solo se necessario e solo nei test, ad esempio aggiungendo la stringa \/\/go:debug rsa1024min=0 nel file di test. Nuovo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#example-GenerateKey-TestKey\">un esempio<\/a> GenerateKey offre una chiave di test standard di 2024 bit facile da usare.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Ora \u00e8 sicuro e pi\u00f9 efficiente chiamare <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precompute\">PrivateKey.Precompute<\/a> fino a <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Validate\">PrivateKey.Validate<\/a>. Precompute \u00e8 ora pi\u00f9 veloce in presenza di <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrecomputedValues\">PrecomputedValues<\/a>, ad esempio quando si estrae una chiave da JSON.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Il pacchetto ora rifiuta pi\u00f9 chiavi errate, anche quando Validate non viene chiamato e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> pu\u00f2 ora restituire nuovi errori per fonti di casualit\u00e0 difettose. I campi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Primes\">Primes<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precomputed\">Precomputed<\/a> struttura <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey\">PrivateKey<\/a> ora sono utilizzati e convalidati anche quando alcuni valori sono assenti. Sono state apportate anche modifiche a crypto\/x509 per l'analisi e l'estrazione delle chiavi RSA, descritte di seguito.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#SignPKCS1v15\">SignPKCS1v15<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#VerifyPKCS1v15\">VerifyPKCS1v15<\/a> ora supportano SHA-512\/224, SHA-512\/256 e SHA-3.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> ora utilizza un metodo leggermente diverso per generare l'esponente privato (funzione di Carmichael invece della funzione di Euler). Le applicazioni rare che ricreano chiavi solo da numeri primi possono generare risultati diversi ma compatibili.<\/p>\n<p><\/noindex> <\/p>\n<p>Le operazioni su chiavi pubbliche e private ora sono fino a due volte pi\u00f9 veloci su wasm.<\/p>\n<h3>crypto\/sha*<\/h3>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha1\/\">crypto\/sha1<\/a>: valore restituito da <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha1#New\">sha1.New<\/a> ora implementa anche l'interfaccia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha256\/\">crypto\/sha256<\/a>: valori restituiti da <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New\">sha256.New<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New224\">sha256.New224<\/a> ora implementano anche l'interfaccia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha512\/\">crypto\/sha512<\/a>: valori restituiti da <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> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_256\">sha512.New512_256<\/a>, ora implementano anche l'interfaccia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/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>La nuova funzione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#WithDataIndependentTiming\">WithDataIndependentTiming<\/a> permette all'utente di eseguire una funzione con funzionalit\u00e0 specifiche per l'architettura che garantiscono l'immutabilit\u00e0 di certe istruzioni riguardo al tempo dei valori dei dati. Questo pu\u00f2 essere utilizzato per assicurarsi che il codice creato per funzionare in tempo costante non sia stato ottimizzato dalle funzionalit\u00e0 a livello di processore in modo da funzionare in tempo variabile. Al momento, WithDataIndependentTiming utilizza il bit PSTATE.DIT su arm64 e non fa nulla su tutte le altre architetture. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configurazione GODEBUG<\/a> dataindependenttiming=1 abilita la modalit\u00e0 DIT per l'intero programma Go.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Conclusione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#XORBytes\">XORBytes<\/a> deve sovrapporsi completamente o per nulla all'input. Il comportamento precedente era indefinito in caso contrario, mentre ora XORBytes generer\u00e0 un panico.<\/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>Il server TLS ora supporta l'Encrypted Client Hello (ECH). Questa funzionalit\u00e0 pu\u00f2 essere attivata riempiendo il campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.EncryptedClientHelloKeys\">Config.EncryptedClientHelloKeys<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Il nuovo meccanismo post-quantum di scambio delle chiavi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#X25519MLKEM768\">X25519MLKEM768<\/a> \u00e8 ora supportato e abilitato di default quando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> \u00e8 nil. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configurazione GODEBUG<\/a> tlsmlkem=0 restituisce il valore predefinito.<\/p>\n<p><\/noindex> <\/p>\n<p>Il supporto per lo scambio di chiavi sperimentale X25519Kyber768Draft00 \u00e8 stato rimosso.<\/p>\n<p> <noindex><\/p>\n<p>L'ordine di scambio delle chiavi \u00e8 ora gestito completamente dal pacchetto crypto\/tls. L'ordine <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> viene ora ignorato, e il contenuto \u00e8 utilizzato solo per determinare quali scambi di chiavi includere quando il campo \u00e8 riempito.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuovo campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#ClientHelloInfo.Extensions\">ClientHelloInfo.Extensions<\/a> elenca un insieme di identificatori di estensioni ricevuti nel messaggio Client Hello. Questo pu\u00f2 essere utile per l'fingerprinting dei client TLS.<\/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\">Configurazione GODEBUG<\/a> x509sha1 \u00e8 stato rimosso. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certficicate.Verify<\/a> non supporta pi\u00f9 le firme basate su SHA-1.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OID<\/a> ora implementa le interfacce <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Il campo predefinito delle politiche di certificato \u00e8 stato modificato da <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.PolicyIdentifiers\">Certificate.PolicyIdentifiers<\/a> in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Policies\">Certificate.Policies<\/a>. Durante l'analisi dei certificati entrambi i campi saranno riempiti, ma durante la creazione delle politiche di certificato saranno presi dal campo Certificate.Policies invece di Certificate.PolicyIdentifiers. Questo cambiamento pu\u00f2 essere ripristinato <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">con l'impostazione 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> ora generer\u00e0 un numero di serie utilizzando un metodo compatibile con RFC 5280 durante il passaggio del modello tramite il campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.SerialNumber\">Certificate.SerialNumber<\/a> nil, invece di fallire.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a> ora supporta la validazione delle politiche, come definito in RFC 5280 e RFC 9618. Il nuovo campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#VerifyOptions.CertificatePolicies\">VerifyOptions.CertificatePolicies<\/a> pu\u00f2 essere impostato su un insieme accettabile di politiche <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OIDs<\/a>. Solo le catene di certificati con grafi di policy validi saranno restituite da <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> ora restituisce un errore invece di estrarre una chiave RSA errata. (<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS1PrivateKey\">MarshalPKCS1PrivateKey<\/a> non restituisce un errore e il suo comportamento con chiavi errate fornite rimane indefinito.)<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS1PrivateKey\">ParsePKCS1PrivateKey<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS8PrivateKey\">ParsePKCS8PrivateKey<\/a> ora utilizza e convalida i valori CRT codificati, quindi pu\u00f2 rifiutare le chiavi RSA non valide che erano state precedentemente accettate. Utilizzando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">l'impostazione GODEBUG<\/a> x509rsacrt=0 riporta al ricalcolo dei valori 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>Pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\">debug\/elf<\/a> aggiunge il supporto per gestire le versioni dei simboli nei file ELF (Executable and Linkable Format). Il nuovo metodo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersions\">File.DynamicVersions<\/a> restituisce un elenco delle versioni dinamiche definite nel file ELF. Il nuovo metodo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersionNeeds\">File.DynamicVersionNeeds<\/a> restituisce un elenco delle versioni dinamiche richieste da questo file ELF, che sono definite in altri oggetti ELF. Infine, i nuovi campi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.HasVersion<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.VersionIndex<\/a> indicando la versione del simbolo.<\/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>Due nuove interfacce <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">TextAppender<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">BinaryAppender<\/a> sono state introdotte per aggiungere una rappresentazione testuale o binaria dell'oggetto a uno slice di byte. Queste interfacce forniscono la stessa funzionalit\u00e0 di <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextMarshaler\">TextMarshaler<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryMarshaler\">BinaryMarshaler<\/a>, ma invece di allocare un nuovo slice ogni volta, aggiungono i dati direttamente nello slice esistente. Queste interfacce sono ora implementate dai tipi della libreria standard che implementano gi\u00e0 TextMarshaler e\/o 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>Nella costruzione, il campo della struttura con la nuova opzione omitzero nel tag del campo della struttura sar\u00e0 omesso se il suo valore \u00e8 zero. Se il tipo del campo ha un metodo IsZero() bool, verr\u00e0 utilizzato per determinare se il valore \u00e8 nullo. Altrimenti, il valore sar\u00e0 nullo se \u00e8 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#The_zero_value\">un valore nullo per il suo tipo<\/a>. Il tag del campo omitzero \u00e8 pi\u00f9 pulito e meno soggetto a errori rispetto a omitempty, quando l'intento \u00e8 quello di omettere i valori nulli. In particolare, a differenza di omitempty, omitzero omette i nulli <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">time.Time<\/a> valori, che sono una fonte comune di problemi.<\/p>\n<p><\/noindex> <\/p>\n<p>Se sono specificati entrambi omitempty e omitzero, il campo sar\u00e0 omesso se il valore \u00e8 vuoto o nullo (o entrambi contemporaneamente).<\/p>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json#UnmarshalTypeError.Field\">UnmarshalTypeError.Field<\/a> ora include strutture incorporate per fornire messaggi di errore pi\u00f9 dettagliati.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types\/\">go\/types<\/a><\/h4>\n<p>Tutte le strutture dati go\/types che rivelano sequenze di coppie di metodi, come Len() int e At(int) T, ora hanno anche metodi che restituiscono iteratori, consentendo di semplificare il codice come questo:<\/p>\n<p> params := fn.Type.(*types.Signature).Params() for i := 0; i &lt; params.Len(); i++ {   use(params.At(i)) }   <\/p>\n<p>Per questo:<\/p>\n<p> for param := range fn.Signature().Params().Variables() {   use(param) }   <noindex><\/p>\n<p>Metodi: <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>: valore restituito da <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32#New\">Nuovo<\/a>encoding.BinaryAppender <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32\/\">hash\/crc32<\/a>: valori restituiti da <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#New\">Nuovo<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#NewIEEE\">NewIEEE<\/a>, ora implementano anche l'interfaccia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64\/\">hash\/crc64<\/a>: valore restituito da <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64#New\">Nuovo<\/a>encoding.BinaryAppender <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv\/\">hash\/fnv<\/a>: valori restituiti da <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> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128a\">New128a<\/a>, ora implementano anche l'interfaccia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash\/\">hash\/maphash<\/a>: nuove funzioni <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#Comparable\">Comparable<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#WriteComparable\">WriteComparable<\/a> possono calcolare l'hash di qualsiasi valore che possa essere confrontato. Questo consente di effettuare l'hash di qualsiasi cosa possa essere utilizzata come chiave di un dizionario 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>Nuovo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#DiscardHandler\">DiscardHandler<\/a> \u00e8 un handler che non \u00e8 mai abilitato e scarta sempre il suo output.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#Level\">Livello<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#LevelVar\">LevelVar<\/a> ora implementa l'interfaccia <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> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Rat\">Rat<\/a> ora implementa l'interfaccia <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>: le chiamate della funzione di alto livello obsoleta <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand#Seed\">Seed<\/a> non hanno pi\u00f9 alcun effetto. Per ripristinare il comportamento precedente \u00e8 possibile utilizzare <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">la configurazione GODEBUG<\/a> randseednop=0. Maggiori dettagli in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67273\">proposta 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> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#PCG\">PCG<\/a> ora implementa l'interfaccia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/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> ora utilizza MPTCP di default sui sistemi dove \u00e8 supportato (al momento solo Linux).<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#IP\">IP<\/a> ora implementa l'interfaccia <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>\u00c8 cambiato il limite <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> sulle risposte informative ricevute 1xx in risposta a una richiesta. In precedenza, ci\u00f2 interrompeva la richiesta e restituiva un errore dopo aver ricevuto pi\u00f9 di 5 risposte 1xx. Ora restituisce un errore solo se la dimensione totale di tutte le risposte 1xx supera la configurazione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.MaxResponseHeaderBytes\">Transport.MaxResponseHeaderBytes<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Inoltre, quando la richiesta ha un hook per il tracciamento <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/httptrace#ClientTrace.Got1xxResponse\">net\/http\/httptrace.ClientTrace.Got1xxResponse<\/a>, ora non c'\u00e8 limite sul numero totale di risposte 1xx. L'hook Got1xxResponse pu\u00f2 restituire un errore per fermare la richiesta.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server\">Server<\/a> ora hanno un campo HTTP2 che consente la configurazione delle impostazioni del protocollo HTTP\/2.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuovi campi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> forniscono un modo semplice per configurare quali protocolli il server o il client HTTP utilizzano.<\/p>\n<p><\/noindex> <\/p>\n<p>Il server e il client possono essere configurati per supportare connessioni HTTP\/2 non crittografate.<\/p>\n<p> <noindex><\/p>\n<p>Quando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> contiene UnencrypterHTTP2, il server accetter\u00e0 connessioni HTTP\/2 su porte non crittografate. Il server pu\u00f2 accettare sia HTTP\/1 che HTTP\/2 non crittografato sulla stessa porta.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Quando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> contiene UnencryptedHTTP2 e non contiene HTTP1, il trasporto utilizzer\u00e0 HTTP\/2 non crittografato per gli indirizzi <a rel=\"nofollow\" href=\"http:\/\/.\">http:\/\/.<\/a> Se il trasporto \u00e8 configurato per utilizzare sia HTTP\/1 che HTTP\/2 non criptato, verr\u00e0 utilizzato HTTP\/1.<\/p>\n<p><\/noindex> <\/p>\n<p>Il supporto per HTTP\/2 non criptato utilizza \"HTTP\/2 con conoscenza anticipata\" (RFC 9113, sezione 3.3). L'intestazione obsoleta \"Upgrade: h2c\" non \u00e8 supportata.<\/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> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Prefix\">Prefix<\/a> ora implementano interfacce <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a> e <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> ora implementa anche l'interfaccia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/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>In Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Corrente<\/a> ora pu\u00f2 essere utilizzato nel Windows Nano Server. L'implementazione \u00e8 stata aggiornata per evitare l'uso di funzioni dalla libreria NetApi32, che \u00e8 assente nel Nano Server.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>In Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Corrente<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Lookup\">Lookup<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#LookupId\">LookupId<\/a> ora supportano i seguenti account di servizio incorporati:<\/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>In Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Corrente<\/a> \u00e8 stata notevolmente accelerata quando l'utente attuale \u00e8 collegato a un dominio lento, il che \u00e8 comune per molti utenti aziendali. La nuova prestazione dell'implementazione ora \u00e8 nell'ordine dei millisecondi, rispetto all'implementazione precedente, che poteva impiegare alcuni secondi, anche minuti, per completarsi.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>In Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Corrente<\/a> ora restituisce l'utente proprietario del processo quando il thread corrente rivendica di essere un altro utente. In precedenza restituiva un errore.<\/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> ora implementa l'interfaccia <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>La funzione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#GOROOT\">GOROOT<\/a> ora dichiarata obsoleta. Nel nuovo codice si dovrebbe preferire l'uso del percorso di sistema per determinare il binario \"go\", e usare go env GOROOT per determinare 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>Pacchetto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\">strings<\/a> aggiunge diverse funzioni per lavorare con gli iteratori:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#Lines\">Lines<\/a> restituisce un iteratore per le righe separate da nuove linee nella stringa.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitSeq\">SplitSeq<\/a> restituisce un iteratore per tutte le sottostringhe della stringa, separate dal delimitatore.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitAfterSeq\">SplitAfterSeq<\/a> restituisce un iteratore per le sottostringhe della stringa, separate dopo ogni occorrenza del delimitatore.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsSeq\">FieldsSeq<\/a> restituisce un iteratore per le sottostringhe della stringa attorno a sequenze di spazi bianchi, come definito<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> restituisce un iteratore per le sottostringhe della stringa attorno a sequenze di punti di codice Unicode che soddisfano un predicato.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync\/\">sync<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Implementazione <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync#Map\">sync.Map<\/a> \u00e8 stata modificata, migliorando le prestazioni, in particolare per le modifiche al dizionario. Ad esempio, \u00e8 meno probabile che ci sia competizione tra cambiamenti in insiemi non sovrapposti su grandi dizionari, e non \u00e8 pi\u00f9 necessario il tempo di crescita per raggiungere un dizionario con bassa competizione.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Se incontri eventuali problemi, imposta GOEXPERIMENT=nosynchashtriemap durante la compilazione per tornare alla vecchia implementazione e, per favore, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/new\">compila il modulo di segnalazione problemi<\/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>Nuovi metodi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Context\">T.Context<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Context\">B.Context<\/a> restituiscono il contesto, che viene annullato dopo il completamento del test e prima dell'esecuzione delle funzioni di pulizia del test.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuovi metodi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Chdir\">T.Chdir<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Chdir\">B.Chdir<\/a> possono essere utilizzati per modificare la directory di lavoro durante l'esecuzione del test o del benchmark.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/text\/template\/\">text\/template<\/a><\/h4>\n<p>I modelli ora supportano range-over-func e 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\">Tempo<\/a> ora implementa le interfacce <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">crypto\/rand<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Porte<\/h2>\n<h3>Linux<\/h3>\n<p> <noindex><\/p>\n<p>Come riportato <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23#linux\">annunciato<\/a> nelle note di rilascio di Go 1.23, Go 1.24 richiede un kernel Linux versione 3.2 o successiva.<\/p>\n<p><\/noindex> <\/p>\n<h3>Darwin<\/h3>\n<p>Go 1.24 \u00e8 l'ultima versione che funzioner\u00e0 su macOS 11 Big Sur. Go 1.25 richieder\u00e0 macOS 12 Monterey o successivo.<\/p>\n<h3>WebAssembly<\/h3>\n<p>La direttiva del compilatore go:wasmexport \u00e8 stata aggiunta ai programmi Go per esportare funzioni nell'host WebAssembly.<\/p>\n<p> <noindex><\/p>\n<p>Nell'Interfaccia di Sistema WebAssembly Preview 1 (GOOS=wasip1 GOARCH=wasm), Go 1.24 supporta la compilazione di un programma Go come <a rel=\"nofollow\" href=\"https:\/\/github.com\/WebAssembly\/WASI\/blob\/63a46f61052a21bfab75a76558485cf097c0dbba\/legacy\/application-abi.md#current-unstable-abi\">reactor\/library<\/a> indicando il flag di compilazione -buildmode=c-shared.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Pi\u00f9 tipi ora sono consentiti come tipi di argomenti o risultati per le funzioni go:wasmimport. In particolare, bool, string, uintptr e puntatori a tipi specifici sono consentiti (i dettagli possono essere visualizzati in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/compile#hdr-WebAssembly_Directives\">documentazione<\/a>), insieme a tipi interi a 32 bit e 64 bit e con numeri a virgola mobile, e unsafe.Pointer, che sono gi\u00e0 consentiti. Questi tipi sono anche consentiti come tipi di argomenti o risultati per le funzioni go:wasmexport.<\/p>\n<p><\/noindex> <\/p>\n<p>I file di supporto per WebAssembly sono stati spostati in lib\/wasm da misc\/wasm.<\/p>\n<p>La dimensione di memoria di base \u00e8 stata notevolmente ridotta, soprattutto per le piccole applicazioni WebAssembly.<\/p>\n<h3>Windows<\/h3>\n<p> <noindex><\/p>\n<p>Il port a 32 bit windows\/arm (GOOS=windows GOARCH=arm) \u00e8 stato segnalato come rotto. Maggiori dettagli in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/70705\">#70705<\/a><\/p>\n<p><\/noindex><\/p>\n<p>Fonte: <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.1.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\/it\/blog\/news\/go-1-24\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\/it\/blog\/news\/go-1-24","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/121950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=121950"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/121950\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/121951"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=121950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=121950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=121950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}