Una nuova versione del linguaggio Go, versione 1.24, arriva sei mesi dopo Andare 1.23. La maggior parte delle modifiche riguarda l'implementazione della toolchain, del runtime e delle librerie. Come sempre, la release prevede promessa di compatibilità Go 1. I progettisti del linguaggio si aspettano che quasi tutti i programmi Go continuino a compilarsi e a funzionare come prima.
La lingua cambia
Go 1.24 ora supporta completamente alias di tipo generico: un alias di tipo può essere parametrizzato come un tipo dichiarato. Dettagli in specifiche della lingua. Per ora, questa funzionalità può essere disattivata impostando GOEXPERIMENT=noaliastypeparams; Tuttavia, l'opzione aliastypeparams verrà rimossa in Go 1.25.
Strumenti
Comando Vai
I moduli Go possono ora tracciare le dipendenze eseguibili utilizzando la direttiva tool in go.mod. In questo modo non è più necessario ricorrere alla precedente soluzione alternativa, ovvero aggiungere strumenti come importazioni vuote in un file solitamente denominato "tools.go". Il comando go tool ora può eseguire questi strumenti oltre a quelli forniti con Go. Ulteriori informazioni sono disponibili all'indirizzo documentazione.
Il nuovo flag -tool per go get fa sì che le direttive tool vengano aggiunte al modulo corrente per i pacchetti specificati, oltre ad aggiungere le direttive require.
Nuovo strumento meta-modello si riferisce a tutti gli strumenti nel modulo corrente. È possibile utilizzarlo per aggiornarli tutti tramite lo strumento Go Get oppure per installarli nella directory GOBIN tramite lo strumento Go Install.
Gli eseguibili creati tramite go run e il nuovo comportamento dello strumento go vengono ora memorizzati nella cache di build di Go. Ciò rende possibili lanci ripetuti grazie all'aumento della cache. #69290.
I comandi go build e go install accettano ora il flag -json, che segnala l'output di build e gli errori come output JSON strutturato sull'output standard. Per i dettagli sul formato, vedere go help buildjson.
Inoltre, go test -json ora segnala gli errori di output e di build in formato JSON, mescolati al risultato del test in formato JSON. Possono essere distinti dai nuovi tipi di azione, ma se causano problemi nel sistema di integrazione dei test, è possibile ricorrere all'output di testo della build tramite Configurazione di GODEBUG gotestjsonbuildtext=1.
La nuova variabile d'ambiente GOAUTH fornisce un modo flessibile per autorizzare i pull di moduli privati. Puoi vedere i dettagli in go help goauth.
Il comando go build è ora installato versione del modulo principale nel binario compilato, in base a un tag e/o a un commit di controllo della versione. Il suffisso +dirty verrà aggiunto se ci sono modifiche non confermate. Il flag -buildvcs=false può essere utilizzato per omettere le informazioni di controllo della versione dal binario.
nuovo Configurazione di GODEBUG traccia della catena degli strumenti=1 può ora essere utilizzato per tracciare il processo di selezione della toolchain nel comando go.
Cgo
Cgo supporta nuove annotazioni per le funzioni C per migliorare le prestazioni in fase di esecuzione. #cgo noescape cFunctionName indica al compilatore che la memoria passata alla funzione C cFunctionName non è sottoposta a escape. #cgo nocallback cFunctionName indica al compilatore che la funzione C cFunctionName non richiama alcuna funzione Go. Ulteriori informazioni sono disponibili all'indirizzo documentazione cgo.
Attualmente Cgo rifiuta di compilare chiamate a una funzione C che presenta più dichiarazioni incompatibili. Ad esempio, se f viene dichiarata sia come void f(int) che come void f(double), cgo segnalerà un errore invece di generare una possibile sequenza di chiamata non valida f(0). Una novità di questa versione è il rilevamento migliorato di questa condizione di errore quando dichiarazioni incompatibili compaiono in file diversi. #67699.
Objdump
Lo strumento objdump ora supporta lo smontaggio su LoongArch a 64 bit (GOARCH=loong64), RISC-V (GOARCH=riscv64) e S390X (GOARCH=s390x).
Grasso
Il nuovo analizzatore di test segnala errori comuni nelle dichiarazioni di test, fuzzer, benchmark ed esempi nelle suite di test, come nomi non validi, firme non valide o esempi che documentano identificatori inesistenti. Alcuni di questi errori potrebbero causare il fallimento dei test.
L'attuale parser printf ora segnala la diagnostica per le chiamate del formato fmt.Printf(s), dove s è una stringa di formato non costante senza altri argomenti. Tali chiamate sono quasi sempre un errore, poiché il valore di s può contenere il carattere %; utilizzare invece fmt.Print. 60529. Questo controllo tende a trovare elementi nel codice esistente e pertanto viene applicato solo quando la versione della lingua (come specificato dalla direttiva go del file go.mod o dai commenti `//go:build`) è almeno Go 1.24, per evitare lunghe interruzioni dell'integrazione durante l'aggiornamento alla toolchain Go 1.24.
L'analizzatore buildtag esistente ora segnala la diagnostica quando è presente un buildtag errato limitazione della build della versione precedente Vai nella direttiva //go:build. Ad esempio, //go:build go1.23.1 fa riferimento a una versione point; utilizzare invece //go:build go1.23. #64127.
L'analizzatore copylock esistente ora segnala una diagnosi quando una variabile viene dichiarata in un ciclo "for" triplo, come for i := iter(); fatto(i); i = next(i) { … }, contiene sync.Locker, come sync.Mutex. Andare 1.22 modificato il comportamento di tali cicli per creare una nuova variabile per ogni iterazione, copiando i valori dall'iterazione precedente; Questa copia non è sicura per le serrature. #66387.
GOCACHEPROG
Il meccanismo interno di memorizzazione nella cache dei dati binari e di test cmd/go può ora essere implementato dai processi figlio che implementano un protocollo JSON tra lo strumento cmd/go e il processo figlio denominato dalla variabile di ambiente GOCACHEPROG. In precedenza era per GOEXPERIMENT. I dettagli del protocollo possono essere consultati in documentazione.
Tempo di completamento
Diversi miglioramenti delle prestazioni in fase di esecuzione hanno ridotto in media il sovraccarico della CPU del 2-3% in una serie di benchmark rappresentativi. I risultati possono variare a seconda dell'applicazione. Questi miglioramenti includono una nuova implementazione della mappa integrata basata su Tavoli svedesi, un'allocazione più efficiente della memoria degli oggetti di piccole dimensioni e una nuova implementazione interna del runtime del mutex.
La nuova implementazione della mappa integrata e il nuovo mutex runtime interno possono essere disabilitati impostando rispettivamente GOEXPERIMENT=noswissmap e GOEXPERIMENT=nospinbitmutex in fase di compilazione.
Compilatore
Il compilatore proibiva già la definizione di nuovi metodi con tipi di ricevitore generati da cgo, ma era possibile aggirare questa restrizione tramite un alias di tipo. Go 1.24 ora segnala sempre un errore se il ricevitore denota un tipo generato da cgo, direttamente o indirettamente (tramite un alias di tipo).
Collegamento
Per impostazione predefinita, il linker genera ora un identificatore di build GNU (voce ELF NT_GNU_BUILD_ID) sulle piattaforme ELF e un UUID (comando di caricamento Mach-O LC_UUID) su macOS. L'ID build o UUID è derivato dall'ID build Go. Questa opzione può essere disattivata con il flag del linker -B none oppure sostituita con il flag del linker -B 0xNNNN con un valore esadecimale specificato dall'utente.
gomito
Come affermato in Note sulla versione Go 1.22, Go 1.24 richiede ora l'installazione di Go 1.22.6 o versione successiva. Gli sviluppatori prevedono che per poter essere distribuito Go 1.26 sarà necessaria una versione secondaria di Go 1.24 o successiva.
Libreria standard
Accesso al file system con restrizioni di directory
Nuovo tipo sistema operativo.root Fornisce la possibilità di eseguire operazioni sul file system all'interno di una directory specifica.
Funzione sistema operativo.OpenRoot apre la directory e ritorna sistema operativo.root. Metodi su sistema operativo.root operano in quella directory e non consentono ai percorsi di fare riferimento a posizioni esterne alla directory, compresi quelli che seguono collegamenti simbolici esterni alla directory. I metodi su os.Root riflettono la maggior parte delle operazioni del file system disponibili nel pacchetto os, tra cui, ad esempio, os.Root.Apri, os.Root.Crea, os.Root.Mkdir и os.Root.Stat.
Nuova funzionalità di benchmark
I benchmark possono ora utilizzare un metodo più veloce e meno soggetto a errori test.B.Loop per iterare su un benchmark come per b.Loop() { … } invece delle tipiche strutture di loop che coinvolgono bN come per range bN Ciò offre due vantaggi significativi:
- La funzione di benchmark viene eseguita esattamente una volta per conteggio, quindi i costosi passaggi di configurazione e pulizia vengono eseguiti una sola volta.
- I parametri e i risultati della chiamata di funzione rimangono attivi, impedendo al compilatore di ottimizzare completamente il corpo del ciclo.
Finalizzatori migliorati
Nuova caratteristica runtime.Aggiungipulizia è un meccanismo di completamento più flessibile, più efficiente e meno soggetto a errori rispetto a runtime.SetFinalizer. AddCleanup associa una funzione di pulizia a un oggetto che verrà eseguita non appena l'oggetto non sarà più disponibile. Tuttavia, a differenza di SetFinalizer, è possibile associare più pulizie a un singolo oggetto, le pulizie possono essere associate a puntatori interni, le pulizie in genere non causano perdite quando gli oggetti formano un ciclo e le pulizie non ritardano la deallocazione dell'oggetto o degli oggetti a cui puntano. Il nuovo codice dovrebbe preferire AddCleanup a SetFinalizer.
Nuovo pacchetto debole
Nuovo pacchetto debole fornisce indicazioni deboli.
I puntatori deboli sono una primitiva di basso livello fornita per creare strutture efficienti in termini di memoria, come dizionari deboli per la mappatura dei valori, dizionari di canonizzazione per qualsiasi cosa non coperta da un pacchetto. unicae vari tipi di cache. Per supportare questi casi d'uso, questa versione fornisce anche runtime.Aggiungipulizia и maphash.Comparable.
Nuovo pacchetto crypto/mlkem
Nuovo pacchetto cripto/mlkem implementa ML-KEM-768 e ML-KEM-1024.
ML-KEM è un meccanismo di scambio di chiavi post-quantico, precedentemente noto come Kyber e specificato in FIP 203.
Nuovi pacchetti crypto/hkdf, crypto/pbkdf2 e crypto/sha3
Nuovo pacchetto cripto/hkdf implementa la funzione di derivazione della chiave "Extract-and-Expand" basata su HMAC HKDF come definita in RFC 5869.
Nuovo pacchetto crittografia/pbkdf2 implementa la funzione di derivazione della chiave basata sulla password PBKDF2 come definita in RFC 8018.
Nuovo pacchetto crittografia/sha3 implementa la funzione hash SHA-3 e le funzioni di output estensibili SHAKE e cSHAKE come definite in FIP 202.
Tutti e tre i pacchetti si basano sui pacchetti golang.org/x/crypto/… esistenti.
Conformità FIPS 140-3
Questa versione include una nuova serie di meccanismi per garantire la conformità FIPS 140-3.
Il modulo crittografico Go è un set di pacchetti di librerie standard interne che vengono utilizzati in modo trasparente per implementare algoritmi approvati FIPS 140-3. Le applicazioni non necessitano di modifiche per utilizzare il modulo di crittografia Go per gli algoritmi approvati.
La nuova variabile d'ambiente GOFIPS140 può essere utilizzata per selezionare la versione del modulo di crittografia Go da utilizzare in una build. Nuovo Configurazione di GODEBUG fips140 può essere utilizzato per abilitare la modalità FIPS 140-3 in fase di esecuzione.
Go 1.24 include il modulo crittografico Go v1.0.0, attualmente in fase di test presso un laboratorio accreditato CMVP.
Nuovo pacchetto sperimentale testing/synctest
Nuovo pacchetto sperimentale test/test di sincronizzazione Fornisce supporto per testare codice concorrente.
- Funzione synctest.esegui gestisce un gruppo di goroutine in una "bolla" isolata. Nella bolla della funzione del pacchetto tempo operano con falsi orologi.
- funzioni synctest.attendere attendere che tutte le goroutine siano bloccate nella bolla corrente.
Per maggiori dettagli consultare la documentazione del pacchetto.
Il pacchetto synctest è sperimentale e deve essere abilitato impostando GOEXPERIMENT=synctest. L'API del pacchetto potrebbe cambiare nelle versioni future. IN #67434 Puoi vedere maggiori dettagli e fornire feedback.
Piccole modifiche nella biblioteca
archiviare
Le implementazioni (*Writer.AddFS) in archive/zip e archive/tar ora scrivono l'intestazione della directory per una directory vuota.
bytes
Pacchetto bytes aggiunge diverse funzioni che funzionano con gli iteratori:
- Linee Restituisce un iteratore su stringhe separate da nuove righe in una porzione di byte.
- DividiSeq restituisce un iteratore su tutte le sottosezioni di una porzione di byte separate da un separatore.
- SplitDopoSeq restituisce un iteratore sulle sottosezioni di una fetta di byte, suddiviso dopo ogni occorrenza del separatore.
- CampiSeq restituisce un iteratore su sottosezioni di una fetta di byte attorno a sequenze di caratteri di spazio, come definito unicode.ÈSpazio
- CampiFuncSeq restituisce un iteratore su sottosezioni della fetta di byte attorno alle sequenze di punti di codice Unicode che soddisfano il predicato.
cripto/aes
Valore di ritorno NuovoChipher non implementa più i metodi NewCTR, NewGCM, NewCBCEncrypter e NewCBCDecrypter. Questi metodi non erano documentati e non erano disponibili su tutte le architetture. Ora il significato Bloccare devono essere passati direttamente alle funzioni appropriate cripto/cifrario. Attualmente, crypto/cipher controlla ancora questi metodi sui valori Block, anche se non sono più supportati dalla libreria standard.
cripto/cifrario
Nuova caratteristica NuovoGCMConNonceCasuale ritorna AEAD, che implementa AES-GCM generando un nonce casuale durante Seal e anteponendolo al testo cifrato.
implementazione Bacheca, restituito NuovoCTR quando utilizzato con cripto/aes ora molto più veloce su amd64 e arm64.
NuovoOFB, NuovoCFBEncrypter и NuovoCFBDecrypter sono ormai dichiarati obsoleti. Le modalità OFB e CFB non sono autenticate, il che generalmente consente agli attacchi attivi di manipolare e recuperare il testo in chiaro. Si consiglia di utilizzare le applicazioni AEAD in cambio. Se la modalità non è autenticata Bacheca necessario, può essere utilizzato NuovoCTR anziché.
cripto/ecdsa
Chiave privata.Sign ora crea una firma deterministica secondo RFC 6979, se la fonte di casualità è nulla.
crittografia/md5
Valore di ritorno md5.nuovo, ora implementa anche l'interfaccia codifica.binarioappender.
criptovaluta/rand
Funzione Leggi ora garantisce l'assenza di guasti. Se Read riscontra un errore durante la lettura Lettore, il programma verrà terminato definitivamente. Si noti che il Reader predefinito è documentato per funzionare sempre correttamente, quindi questa modifica dovrebbe riguardare solo i programmi che sovrascrivono la variabile Reader. Un'eccezione sono i kernel Linux precedenti alla versione 3.17, in cui il lettore predefinito apre ancora /dev/urandom e potrebbe non funzionare.
Su Linux 6.11 e versioni successive, Reader utilizza ora la chiamata di sistema getrandom tramite vDSO. Questa è una velocità notevolmente superiore, solitamente per letture di piccole dimensioni.
Su OpenBSD Reader ora utilizza arc4random_buf(3).
Nuova caratteristica Testo può ora generare stringhe di testo casuali crittograficamente sicure.
crittografia/rsa
GeneraChiave ora restituisce un errore se viene richiesta una lunghezza della chiave inferiore a 1024 bit. Tutti i metodi Sign, Verify, Encrypt e Decrypt ora restituiscono un errore se utilizzati con una dimensione della chiave inferiore a 1024 bit. Tali chiavi non sono sicure e non devono essere utilizzate. Impostazione di GODEBUG rsa1024min=0 ripristina il vecchio comportamento, ma gli sviluppatori di Go consigliano di farlo solo quando necessario e solo nei test, ad esempio aggiungendo la riga //go:debug rsa1024min=0 al file di test. Nuovo esempio GenerateKey fornisce una chiave di prova standard da 2024 bit facile da usare.
Ora è più sicuro ed efficiente chiamare Chiave privata.Precalcola a Convalida PrivateKey. Il precompute è ora più veloce in presenza di dati parzialmente riempiti Valori precalcolati, ad esempio quando si estrae una chiave da JSON.
Il pacchetto ora rifiuta più chiavi non valide anche quando Validate non viene chiamato e GeneraChiave ora può restituire nuovi errori per le fonti di casualità non funzionanti. Campi Primes и Precalcolato la struttura PrivateKey vengono ora utilizzati e validati anche quando mancano alcuni valori. Sono state apportate anche modifiche a crypto/x509 per l'analisi e l'estrazione delle chiavi RSA, descritte di seguito.
SegnoPKCS1v15 и VerificaPKCS1v15 ora supporta SHA-512/224, SHA-512/256 e SHA-3.
GeneraChiave ora utilizza un metodo leggermente diverso per generare l'esponente privato (funzione di Carmichael anziché funzione di Eulero). Rare applicazioni che rigenerano esternamente le chiavi solo da numeri primi potrebbero produrre risultati diversi ma compatibili.
Le operazioni sulle chiavi pubbliche e private sono ora fino a due volte più veloci su wasm.
cripto/sha*
- crittografia/sha1: valore di ritorno sha1.Nuovo ora implementa anche l'interfaccia codifica.binarioappender.
- crittografia/sha256: valori restituiti sha256.Nuovo и sha256.Nuovo224 ora implementa anche l'interfaccia codifica.binarioappender.
- crittografia/sha512: valori restituiti sha512.Nuovo, sha512.Nuovo384, sha512.Nuovo512_224 и sha512.Nuovo512_256, ora implementa anche l'interfaccia codifica.binarioappender.
cripto/sottile
Nuova caratteristica ConDataIndependentTiming consente all'utente di eseguire una funzione con funzionalità specifiche dell'architettura abilitate che garantiscono che determinate istruzioni non vengano modificate rispetto al tempo del valore dei dati. Questo può essere utilizzato per garantire che il codice scritto per essere eseguito in tempo costante non sia stato ottimizzato dalle funzioni a livello di processore in modo da essere eseguito in tempo variabile. Attualmente WithDataIndependentTiming utilizza il bit PSTATE.DIT su arm64 e non fa nulla su tutte le altre architetture. Impostazione di GODEBUG dataindependenttiming=1 abilita la modalità DIT per l'intero programma Go.
conclusione XORbyte deve sovrapporsi completamente o per niente all'input. In precedenza il comportamento non era definito altrimenti, mentre ora XORBytes andrà in panico.
cripto/TLS
Il server TLS ora supporta Encrypted Client Hello (ECH). Questa funzionalità può essere abilitata compilando il campo. ConfigurazioneClientCrittografatoHelloKeys.
Un nuovo meccanismo di scambio di chiavi post-quantico Codice articolo: X25519MLKEM768 ora supportato e abilitato di default quando Config.CurvePreferences è nullo. Impostazione di GODEBUG tlsmlkem=0 restituisce il valore predefinito.
È stato rimosso il supporto per lo scambio di chiavi sperimentale X25519Kyber768Draft00.
L'ordine di scambio delle chiavi è ora gestito interamente dal pacchetto crypto/tls. Ordine Config.CurvePreferences viene ora ignorato e il contenuto viene utilizzato solo per determinare quali scambi di chiavi includere quando il campo viene compilato.
Nuovo campo ClientHelloInfo.Estensioni Elenca l'elenco degli identificatori di estensione ricevuti nel messaggio Client Hello. Può essere utile per rilevare le impronte digitali dei client TLS.
crittografia/x509
Impostazione di GODEBUG x509sha1 è stato rimosso. Certificazione.Verifica non supporta più le firme basate su SHA-1.
OID ora implementa le interfacce codifica.binarioappender и codifica.TextAppender.
Il campo predefinito della politica del certificato è stato modificato da Certificato.Identificatori di policy su Certificato.Politiche. Durante l'analisi dei certificati, entrambi i campi verranno popolati, ma quando si crea una policy di certificazione, verranno presi dal campo Certificate.Policies anziché da Certificate.PolicyIdentifiers. Questa modifica può essere annullata. Configurazione di GODEBUG x509usepolicies=0.
Crea certificato ora genererà un numero di serie utilizzando un metodo conforme a RFC 5280 quando si passa un campo modello Certificato.Numero di serie nil, invece di schiantarsi.
Certificato.Verifica ora supporta la convalida delle policy come definito in RFC 5280 e RFC 9618. Nuovo campo VerifyOptions.CertificatePolicies può essere impostato su un insieme accettabile di criteri OID. Verranno restituite solo catene di certificati con grafici di policy validi Certificato.Verifica.
MarshalPKCS8ChiavePrivata ora restituisce un errore invece di recuperare una chiave RSA non valida. (MarshalPKCS1ChiavePrivata non restituisce alcun errore e il suo comportamento quando vengono fornite chiavi non valide rimane indefinito.)
AnalizzaPKCS1PrivateKey и AnalizzaPKCS8PrivateKey ora utilizza e convalida i valori CRT codificati, quindi può rifiutare le chiavi RSA non valide precedentemente accettate. Utilizzo Impostazioni GODEBUG x509rsacrt=0 torna al ricalcolo dei valori CRT.
debug/elf
Pacchetto debug/elf Aggiunge il supporto per la gestione delle versioni dei simboli nei file ELF (Executable and Linkable Format) dinamici. Nuovo metodo File.DynamicVersions Restituisce un elenco di versioni dinamiche definite in un file ELF. Nuovo metodo File.DinamicoVersioneNeeds Restituisce un elenco delle versioni dinamiche richieste da questo file ELF e definite in altri oggetti ELF. Infine, nuovi campi Simbolo.HasVersion и Simbolo.VersioneIndice indica la versione del simbolo.
codifica
Due nuove interfacce Aggiunta di testo и Appendere binario sono stati introdotti per aggiungere una rappresentazione testuale o binaria di un oggetto a una porzione di byte. Queste interfacce forniscono le stesse funzionalità di Gestore di testo и Marshaller binario, ma invece di allocare ogni volta una nuova porzione, aggiungono i dati direttamente a una porzione esistente. Queste interfacce sono attualmente implementate dai tipi di libreria standard che implementano già TextMarshaler e/o BinaryMarshaler.
codifica/json
Durante la compilazione, un campo struttura con la nuova opzione omitzero nel tag del campo struttura verrà omesso se il suo valore è zero. Se il tipo di campo ha un metodo bool IsZero(), questo verrà utilizzato per determinare se il valore è zero. Altrimenti il valore sarà zero se valore nullo per il suo tipo. Il tag del campo omitzero è più pulito e meno soggetto a errori rispetto a omitempty quando l'intento è quello di omettere valori nulli. In particolare, a differenza di omitempty, omitzero omette gli zeri tempo.tempo valori, che rappresentano una fonte comune di problemi.
Se vengono specificati sia omitempty che omitzero, il campo verrà omesso se il valore è vuoto o zero (o entrambi).
Errore di tipo di errore di Unmarshal.Field ora include strutture integrate per fornire messaggi di errore più dettagliati.
vai/tipi
Tutte le strutture dati go/types che espongono sequenze di coppie di metodi, come Len() int e At(int) T, ora hanno anche metodi che restituiscono iteratori, consentendo un codice più semplice come questo:
parametri := fn.Type.(*types.Signature).Params() per i := 0; i < parametri.Len(); i++ { usa(parametri.At(i)) }
Su questo:
per param := range fn.Signature().Params().Variables() { usa(param) }
Методы: Interfaccia.Tipi incorporati Interfaccia.Metodi Explicit Interfaccia.Metodi MethodSet.Metodi Metodi denominati Ambito.Bambini Struttura.Campi Tuple.Variabili Elenco tipi.Tipi Elenco dei tipi di parametri.Parametri di tipo Unione.Termini
cancelletto/*
- hash/adler32: valore di ritorno New, ora implementa anche l'interfaccia codifica.binarioappender
- hash/crc32: valori restituiti New и NuovoIEEE, ora implementa anche l'interfaccia codifica.binarioappender
- hash/crc64: valore di ritorno New, ora implementa anche l'interfaccia codifica.binarioappender
- hash/fnv: valori restituiti Nuovo32 Nuovo32a Nuovo64 Nuovo64a Nuovo128 и Nuovo128a, ora implementa anche l'interfaccia codifica.binarioappender
- hash/maphash: nuove funzionalità paragonabile и ScriviComparable può calcolare l'hash di qualsiasi valore che può essere confrontato. Ciò consente di eseguire l'hashing di qualsiasi cosa possa essere utilizzata come chiave del dizionario Go.
registro/sgobbare
Nuovo Gestore di scarti è un gestore che non è mai abilitato e scarta sempre il suo output.
Livella и LivelloVar ora implementa l'interfaccia codifica.TextAppender.
matematica/*
- matematica/grande: galleggiante, Int и Ratto ora implementa l'interfaccia codifica.TextAppender.
- matematica/rand: chiamate di funzioni di primo livello deprecate Seme non hanno più alcun effetto. Per ripristinare il vecchio comportamento, puoi usare Configurazione di GODEBUG randseednop=0. Maggiori informazioni in offerta 67273.
- matematica/rand/v2: ChaCha8 и PCG ora implementa l'interfaccia codifica.binarioappender.
rete
AscoltaCondig ora utilizza MPTCP per impostazione predefinita sui sistemi in cui è supportato (attualmente solo Linux).
IP ora implementa l'interfaccia codifica.TextAppender.
rete/http
La restrizione è cambiata Trasporti alle risposte informative 1xx ricevute in risposta alla richiesta. In precedenza, questo interrompeva la richiesta e restituiva un errore dopo aver ricevuto più di 5 risposte 1xx. Ora restituisce un errore solo se la dimensione totale di tutte le risposte 1xx supera l'impostazione di configurazione Trasporto.MaxResponseHeaderBytes.
Inoltre, quando una richiesta ha un gancio di tracciamento net/http/httptrace.ClientTrace.Got1xxResponse, ora non c'è limite al numero totale di risposte 1xx. Il gancio Got1xxResponse può restituire un errore per interrompere la richiesta.
Trasporti и server ora dispone di un campo HTTP2 che consente la configurazione delle impostazioni del protocollo HTTP/2.
Nuovi campi Server.Protocolli и Protocolli di trasporto fornisce un modo semplice per configurare quali protocolli HTTP vengono utilizzati dal server o dal client.
Il server e il client possono essere configurati per supportare connessioni HTTP/2 non crittografate.
Quando Server.Protocolli contiene UnencrypterHTTP2, il server accetterà connessioni HTTP/2 su porte non crittografate. Il server può accettare sia HTTP/1 che HTTP/2 non crittografato sulla stessa porta.
Quando Protocolli di trasporto contiene UnencryptedHTTP2 e non contiene HTTP1, il trasporto utilizzerà HTTP/2 non crittografato per gli indirizzi http://. Se un trasporto è configurato per utilizzare sia HTTP/1 sia HTTP/2 non crittografato, utilizzerà HTTP/1.
Il supporto per HTTP/2 non crittografato utilizza "HTTP/2 con Forward-Learning" (RFC 9113, sezione 3.3). L'intestazione deprecata "Upgrade: h2c" non è supportata.
rete/netip
Ind, IndirizzoPorta и Prefisso ora implementare le interfacce codifica.binarioappender и codifica.TextAppender.
rete/url
URL ora implementa anche l'interfaccia codifica.binarioappender.
sistema operativo/utente
Su Windows Corrente può ora essere utilizzato in Windows Nano Server. L'implementazione è stata aggiornata per evitare di utilizzare funzioni della libreria NetApi32, mancante in Nano Server.
Su Windows Corrente, Lookup и ID di ricerca ora supporta i seguenti account di servizio utente integrati:
- SISTEMA DELLE AUTORITÀ NT
- AUTORITÀ NTSERVIZIO LOCALE
- NT AUTHORITY NETWORK SERVICE
Su Windows Corrente è stato notevolmente accelerato quando l'utente corrente è stato aggiunto a un dominio lento, il che è un caso comune per molti utenti aziendali. Le prestazioni della nuova implementazione sono ora nell'ordine dei millisecondi, rispetto all'implementazione precedente, che poteva richiedere diversi secondi, persino minuti, per essere completata.
Su Windows Corrente ora restituisce l'utente proprietario del processo quando il thread corrente impersona un altro utente. In precedenza veniva restituito un errore.
regexp
Espressione regolare ora implementa l'interfaccia codifica.TextAdapter.
runtime
Funzione GORO è ora obsoleto. Negli ambienti più recenti, è preferibile utilizzare il percorso di sistema per determinare il binario "go" e utilizzare go env GOROOT per determinare GOROOT.
stringhe
Pacchetto stringhe aggiunge diverse funzioni per lavorare con gli iteratori:
- Linee Restituisce un iteratore sulle righe separate da nuova riga in una stringa.
- DividiSeq restituisce un iteratore su tutte le sottostringhe di una stringa separate da un separatore.
- SplitDopoSeq restituisce un iteratore sulle sottostringhe di una stringa, suddiviso dopo ogni occorrenza del separatore.
- CampiSeq restituisce un iteratore sulle sottostringhe di una stringa attorno a sequenze di caratteri di spaziatura, come definitounicode.ÈSpazio
- CampiFuncSeq Restituisce un iteratore sulle sottostringhe di una stringa attorno alle sequenze di punti di codice Unicode che soddisfano un predicato.
sync
implementazione sincronizza.mappa è stato modificato per migliorare le prestazioni, in particolare per le modifiche al dizionario. Ad esempio, la contesa per la modifica di insiemi disgiunti è meno probabile su dizionari di grandi dimensioni e non è più necessario un tempo di accumulo per ottenere un carico di dizionario basso con contesa.
Se riscontri problemi, imposta GOEXPERIMENT=nosynchashtriemap durante la compilazione per tornare alla vecchia implementazione e per favore compila il modulo del problema.
analisi
Nuovi mezzi T.Contesto и B.Contesto restituisce un contesto che viene scartato dopo il completamento del test e prima che vengano eseguite le funzioni di pulizia del test.
Nuovi mezzi T.Chdir и B.Chdir può essere utilizzato per cambiare la directory di lavoro per la durata di un test o di un benchmark.
testo/modello
I modelli ora supportano range-over-func e range-over-int.
tempo
Ora ora implementa le interfacce codifica.binarioappender и codifica.TextAppender.
porte
Linux
Com'era объявлено Secondo le note di rilascio di Go 1.23, Go 1.24 richiede il kernel Linux versione 3.2 o successiva.
Darwin
Go 1.24 è l'ultima versione che funzionerà su macOS 11 Big Sur. Go 1.25 richiederà macOS 12 Monterey o versione successiva.
WebAssembly
La direttiva del compilatore go:wasmexport è stata aggiunta ai programmi Go per esportare funzioni all'host WebAssembly.
In WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm), Go 1.24 supporta la creazione di un programma Go come reattore/biblioteca specificando il flag di build -buildmode=c-shared.
Ora sono consentiti più tipi come argomenti o tipi di risultato per le funzioni go:wasmimport. In particolare, sono consentiti bool, string, uintptr e puntatori a determinati tipi (vedere i dettagli in documentazione), insieme ai tipi interi e in virgola mobile a 32 e 64 bit e unsafe.Pointer, che sono già consentiti. Questi tipi sono consentiti anche come tipi di argomento o di risultato per le funzioni go:wasmexport.
I file di supporto per WebAssembly sono stati spostati da misc/wasm a lib/wasm.
L'ingombro di memoria iniziale è notevolmente ridotto, soprattutto per le piccole applicazioni WebAssembly.
Windows
La porta Windows/Arm a 32 bit (GOOS=windows GOARCH=arm) è stata contrassegnata come non funzionante. Dettagli in #70705
Fonte: linux.org.ru
