Aller 1.24

Aller 1.24

Une nouvelle version du langage Go, la version 1.24, arrive six mois après Aller 1.23. La plupart des changements concernent la mise en œuvre de la chaîne d’outils, l’exécution et les bibliothèques. Comme toujours, la version fournit promesse de compatibilité 1. Les concepteurs du langage s'attendent à ce que presque tous les programmes Go continuent à être compilés et exécutés comme avant.

Changements de langue

Go 1.24 prend désormais entièrement en charge alias de type générique:un alias de type peut être paramétré comme un type déclaré. Détails dans spécifications linguistiques. Pour l’instant, cette fonctionnalité peut être désactivée en définissant GOEXPERIMENT=noaliastypeparams ; Cependant, l'option aliastypeparams sera supprimée dans Go 1.25.

Outils

Commande Go

Les modules Go peuvent désormais suivre les dépendances exécutables à l'aide de la directive tool dans go.mod. Cela supprime la nécessité de la solution de contournement précédente consistant à ajouter des outils en tant qu'importations vides dans un fichier généralement appelé « tools.go ». La commande go tool peut désormais exécuter ces outils en plus des outils fournis avec Go. Plus d'informations peuvent être trouvées sur documentation.

Le nouvel indicateur -tool pour go get entraîne l'ajout de directives d'outils au module actuel pour les packages spécifiés en plus de l'ajout de directives require.

nouveau outil de méta-modèle fait référence à tous les outils du module actuel. Cela peut être utilisé pour les mettre à jour tous via l'outil go get, ou pour les installer dans votre répertoire GOBIN via l'outil go install.

Les exécutables créés via go run et le nouveau comportement de l'outil go sont désormais mis en cache dans le cache de build Go. Cela rend les lancements répétés possibles grâce au cache accru. #69290.

Les commandes go build et go install acceptent désormais l'indicateur -json, qui signale la sortie de build et les erreurs sous forme de sortie JSON structurée sur la sortie standard. Les détails du format peuvent être consultés dans go help buildjson.

De plus, go test -json signale désormais les erreurs de sortie et de build au format JSON, mélangées au résultat du test JSON. Ils peuvent être distingués par les nouveaux types d'action, mais s'ils causent des problèmes dans le système d'intégration de test, vous pouvez revenir à la sortie texte de la build via Configuration de GODEBUG gotestjsonbuildtext=1.

La nouvelle variable d'environnement GOAUTH fournit un moyen flexible d'autoriser les extractions de modules privés. Vous pouvez voir les détails dans go help gouuth.

La commande go build est maintenant installée version du module principal dans le binaire compilé, basé sur une balise et/ou un commit de contrôle de version. Le suffixe +dirty sera ajouté s'il y a des modifications non validées. L'indicateur -buildvcs=false peut être utilisé pour omettre les informations de contrôle de version du binaire.

nouveau Configuration de GODEBUG trace de chaîne d'outils = 1 peut désormais être utilisé pour suivre le processus de sélection de la chaîne d'outils dans la commande go.

Cgo

Cgo prend en charge de nouvelles annotations pour les fonctions C afin d'améliorer les performances d'exécution. #cgo noescape cFunctionName indique au compilateur que la mémoire passée à la fonction C cFunctionName n'est pas échappée. #cgo nocallback cFunctionName indique au compilateur que la fonction C cFunctionName ne rappelle aucune fonction Go. Plus d'informations peuvent être trouvées sur documentation cgo.

Cgo refuse actuellement de compiler les appels à une fonction C qui comporte plusieurs déclarations incompatibles. Par exemple, si f est déclaré à la fois comme void f(int) et void f(double), cgo signalera une erreur au lieu de générer éventuellement une séquence d'appel non valide f(0). La nouveauté de cette version est une détection améliorée de cette condition d'erreur lorsque des déclarations incompatibles apparaissent dans différents fichiers. #67699.

Objdump

L'outil objdump prend désormais en charge le désassemblage sur LoongArch 64 bits (GOARCH=loong64), RISC-V (GOARCH=riscv64) et S390X (GOARCH=s390x).

Graisse

Le nouvel analyseur de tests signale les erreurs courantes dans les déclarations de test, de fuzzer, de benchmark et d'exemple dans les suites de tests, telles que les noms mal formés, les signatures non valides ou les exemples qui documentent des identifiants inexistants. Certaines de ces erreurs peuvent entraîner l’échec des tests.

L'analyseur printf existant signale désormais des diagnostics pour les appels de la forme fmt.Printf(s), où s est une chaîne de format non constante sans autre argument. De tels appels sont presque toujours une erreur, car la valeur de s peut contenir le caractère % ; utilisez plutôt fmt.Print. 60529. Cette vérification a tendance à trouver des éléments dans le code existant et n'est donc appliquée que lorsque la version de la langue (telle que spécifiée par la directive go du fichier go.mod ou les commentaires `//go:build`) est au moins Go 1.24, pour éviter de provoquer de longues interruptions d'intégration lors de la mise à niveau vers la chaîne d'outils Go 1.24.

L'analyseur de balises de construction existant signale désormais des diagnostics lorsqu'il existe une balise de construction incorrecte limitation de construction d'une ancienne version Allez dans la directive //go:build. Par exemple, //go:build go1.23.1 fait référence à une version ponctuelle ; utilisez plutôt //go:build go1.23. #64127.

L'analyseur de copylock existant signale désormais un diagnostic lorsqu'une variable est déclarée dans une boucle triple « for », comme for i := iter(); fait(i); i = next(i) { … }, contient sync.Locker, tel que sync.Mutex. Aller 1.22 modifié le comportement de ces boucles pour créer une nouvelle variable pour chaque itération, en copiant les valeurs de l'itération précédente ; Cette copie n'est pas sûre pour les serrures. #66387.

PROGRAMME DE CACHAGE DE GOCACHE

Le mécanisme interne de mise en cache des binaires et des tests cmd/go peut désormais être implémenté par des processus enfants implémentant un protocole JSON entre l'outil cmd/go et le processus enfant nommé par la variable d'environnement GOCACHEPROG. Auparavant c'était pour GOEXPERIMENT. Les détails du protocole peuvent être consultés dans documentation.

Heure d'achèvement

Plusieurs améliorations des performances d’exécution ont réduit la charge du processeur de 2 à 3 % en moyenne sur un ensemble de tests de performance représentatifs. Les résultats peuvent varier en fonction de l'application. Ces améliorations incluent une nouvelle implémentation de carte intégrée basée sur Tables suédoises, une allocation plus efficace de la mémoire des petits objets et une nouvelle implémentation d'exécution interne du mutex.

La nouvelle implémentation de carte intégrée et le nouveau mutex d'exécution interne peuvent être désactivés en définissant respectivement GOEXPERIMENT=noswissmap et GOEXPERIMENT=nospinbitmutex au moment de la construction.

Compilateur

Le compilateur interdisait déjà la définition de nouvelles méthodes avec des types de récepteurs générés par cgo, mais il était possible de contourner cette restriction via un alias de type. Go 1.24 signale désormais toujours une erreur si le récepteur désigne un type généré par cgo, directement ou indirectement (via un alias de type).

Lien

Le linker génère désormais un identifiant de build GNU (entrée ELF NT_GNU_BUILD_ID) sur les plates-formes ELF et un UUID (commande de chargement Mach-O LC_UUID) sur macOS par défaut. L'ID de build ou UUID est dérivé de l'ID de build Go. Cela peut être désactivé avec l'indicateur de lien -B none, ou remplacé par l'indicateur de lien -B 0xNNNN avec une valeur hexadécimale spécifiée par l'utilisateur.

Promotion

Comme indiqué dans Notes de version de Go 1.22, Go 1.24 nécessite désormais l'installation de Go 1.22.6 ou d'une version ultérieure. Les développeurs s'attendent à ce que Go 1.26 nécessite une version ponctuelle de Go 1.24 ou ultérieure pour être déployé.

Bibliothèque standard

Accès au système de fichiers restreint par répertoire

Nouveau type os.root Fournit la possibilité d'effectuer des opérations sur le système de fichiers dans un répertoire spécifique.

Fonction os.OpenRoot ouvre le répertoire et renvoie os.root. Méthodes sur os.root fonctionnent dans ce répertoire et n'autorisent pas les chemins à faire référence à des emplacements en dehors du répertoire, y compris ceux qui suivent des liens symboliques en dehors du répertoire. Les méthodes sur os.Root reflètent la plupart des opérations du système de fichiers disponibles dans le package os, y compris, par exemple, os.Root.Open, os.Root.Créer, os.Root.Mkdir и os.Root.Stat.

Nouvelle fonctionnalité de référence

Les benchmarks peuvent désormais utiliser une méthode plus rapide et moins sujette aux erreurs test.B.Loop pour itérer sur un benchmark comme for b.Loop() { … } au lieu des structures de boucle typiques impliquant bN comme for range bN Cela offre deux avantages significatifs :

  • La fonction de référence est exécutée exactement une fois par compte, de sorte que les étapes coûteuses de configuration et de nettoyage ne sont effectuées qu'une seule fois.
  • Les paramètres et les résultats de l'appel de fonction perdurent, empêchant le compilateur d'optimiser complètement le corps de la boucle.

Finaliseurs améliorés

Nouvelle fonctionnalité exécution.AddCleanup est un mécanisme d'achèvement plus flexible, plus efficace et moins sujet aux erreurs que runtime.SetFinalizer. AddCleanup attache une fonction de nettoyage à un objet qui sera exécutée dès que l'objet deviendra indisponible. Cependant, contrairement à SetFinalizer, plusieurs nettoyages peuvent être attachés à un seul objet, les nettoyages peuvent être attachés à des pointeurs internes, les nettoyages ne provoquent généralement pas de fuites lorsque les objets forment un cycle et les nettoyages ne retardent pas la désallocation de l'objet ou des objets vers lesquels il pointe. Le nouveau code devrait préférer AddCleanup à SetFinalizer.

Nouveau paquet faible

Nouveau forfait faible fournit des indicateurs faibles.

Les pointeurs faibles sont des primitives de bas niveau fournies pour créer des structures efficaces en termes de mémoire telles que des dictionnaires faibles pour le mappage de valeurs, des dictionnaires de canonisation pour tout ce qui n'est pas couvert par un package. SÉJOUR MÉMORABLE, et divers types de caches. Pour prendre en charge ces cas d'utilisation, cette version fournit également exécution.AddCleanup и maphash.Comparable.

Nouveau paquet crypto/mlkem

Nouveau forfait crypto/mlkem implémente ML-KEM-768 et ML-KEM-1024.

ML-KEM est un mécanisme d'échange de clés post-quantique, anciennement connu sous le nom de Kyber et spécifié dans FIPS203.

Nouveaux packages crypto/hkdf, crypto/pbkdf2 et crypto/sha3

Nouveau forfait crypto/hkdf implémente la fonction de dérivation de clé « Extraire et développer » basée sur HMAC HKDF telle que définie dans RFC 5869.

Nouveau forfait crypto/pbkdf2 implémente la fonction de dérivation de clé basée sur un mot de passe PBKDF2 telle que définie dans RFC 8018.

Nouveau forfait crypto/sha3 implémente la fonction de hachage SHA-3 et les fonctions de sortie extensibles SHAKE et cSHAKE telles que définies dans FIPS202.

Les trois packages sont basés sur les packages golang.org/x/crypto/… existants.

Conformité à la norme FIPS 140-3

Cette version comprend un nouvel ensemble de mécanismes pour garantir la conformité à la norme FIPS 140-3.

Le module crypto Go est un ensemble de packages de bibliothèque standard internes qui sont utilisés de manière transparente pour implémenter les algorithmes approuvés par FIPS 140-3. Les applications ne nécessitent aucune modification pour utiliser le module cryptographique Go pour les algorithmes approuvés.

La nouvelle variable d'environnement GOFIPS140 peut être utilisée pour sélectionner la version du module de cryptographie Go à utiliser dans une build. Nouveau Configuration de GODEBUG fips140 peut être utilisé pour activer le mode FIPS 140-3 lors de l'exécution.

Go 1.24 inclut le module crypto Go v1.0.0, qui est actuellement testé avec un laboratoire accrédité CMVP.

Nouveau package expérimental testing/synctest

Nouveau package expérimental test/test de synchronisation Fournit un support pour tester le code simultané.

  • Fonction synctest.run exécute un groupe de goroutines dans une « bulle » isolée. Dans la bulle de la fonction package Paisible fonctionner sur de fausses horloges.
  • fonctions synctest.attendre attendez que toutes les goroutines soient bloquées dans la bulle actuelle.

Les détails peuvent être trouvés dans la documentation du package.

Le package synctest est expérimental et doit être activé en définissant GOEXPERIMENT=synctest. L'API du package peut changer dans les versions futures. DANS #67434 Vous pouvez voir plus de détails et donner votre avis.

Modifications mineures dans la bibliothèque

archives

Les implémentations (*Writer.AddFS) dans archive/zip et archive/tar écrivent désormais l'en-tête de répertoire pour un répertoire vide.

octets

Forfait octets ajoute plusieurs fonctions qui fonctionnent avec les itérateurs :

  • Lignés Renvoie un itérateur sur des chaînes séparées par des sauts de ligne dans une tranche d'octets.
  • Séquence divisée renvoie un itérateur sur toutes les sous-tranches d'une tranche d'octets séparées par un séparateur.
  • SéparerAprèsSéquence renvoie un itérateur sur les sous-tranches d'une tranche d'octets, divisée après chaque occurrence du séparateur.
  • ChampsSeq renvoie un itérateur sur des sous-tranches d'une tranche d'octets autour de séquences de caractères d'espace, comme défini unicode.EstSpace
  • ChampsFuncSeq renvoie un itérateur sur les sous-tranches de la tranche d'octets autour des séquences de points de code Unicode satisfaisant le prédicat.

crypto/aes

Valeur de retour NouveauChipher n'implémente plus les méthodes NewCTR, NewGCM, NewCBCEncrypter et NewCBCDecrypter. Ces méthodes n’étaient pas documentées et n’étaient pas disponibles sur toutes les architectures. Maintenant, le sens Bloquer doit être transmis directement aux fonctions appropriées crypto/chiffre. Actuellement, crypto/cipher vérifie toujours ces méthodes sur les valeurs de bloc, même si elles ne sont plus prises en charge par la bibliothèque standard.

crypto/chiffre

Nouvelle fonctionnalité NouveauGCM avec nonce aléatoire retourne AEAD, qui implémente AES-GCM en générant un nonce aléatoire pendant Seal et en le préfixant au texte chiffré.

exécution Discussions, retourné NouveauCTR lorsqu'il est utilisé avec crypto/aes maintenant plusieurs fois plus rapide sur amd64 et arm64.

NouveauOFB, NouveauCFBEncrypter и Nouveau décrypteur CFBD sont désormais déclarées obsolètes. Les modes OFB et CFB ne sont pas authentifiés, ce qui permet généralement aux attaques actives de manipuler et de récupérer du texte en clair. Il est recommandé d'utiliser des applications AEAD en retour. Si mode non authentifié Discussions nécessaire, peut être utilisé NouveauCTR au lieu.

crypto/ecdsa

Clé privée.Sign crée maintenant une signature déterministe selon RFC 6979, si la source aléatoire est nulle.

crypto/md5

Valeur de retour md5.nouveau, implémente désormais également l'interface encodage.binaryappender.

crypto/rand

Fonction Lire garantit désormais aucune panne. Si Read rencontre une erreur lors de la lecture Reader, le programme se terminera définitivement. Notez que le lecteur par défaut est documenté pour toujours fonctionner avec succès, donc ce changement ne devrait affecter que les programmes qui remplacent la variable Reader. Une exception concerne les noyaux Linux antérieurs à la version 3.17, où le lecteur par défaut ouvre toujours /dev/urandom et peut échouer.

Sous Linux 6.11 et versions ultérieures, Reader utilise désormais l'appel système getrandom via vDSO. C'est plusieurs fois plus rapide, généralement pour les petites lectures.

Sur OpenBSD, Reader utilise désormais arc4random_buf(3).

Nouvelle fonctionnalité Texte peut désormais générer des chaînes de texte aléatoires cryptographiquement sécurisées.

crypto/rsa

Générer une clé renvoie désormais une erreur si une longueur de clé inférieure à 1024 bits est demandée. Toutes les méthodes Sign, Verify, Encrypt et Decrypt renvoient désormais une erreur si elles sont utilisées avec une taille de clé inférieure à 1024 XNUMX bits. De telles clés ne sont pas sûres et ne doivent pas être utilisées. Configuration de GODEBUG rsa1024min=0 restaure l'ancien comportement, mais les développeurs Go recommandent de le faire uniquement lorsque cela est nécessaire et uniquement dans les tests, par exemple en ajoutant la ligne //go:debug rsa1024min=0 au fichier de test. Nouveau exemple GenerateKey fournit une clé de test standard de 2024 bits facile à utiliser.

Il est désormais plus sûr et plus efficace d'appeler Clé privée.Précalcul à Clé privée.Valider. Le précalcul est désormais plus rapide en présence de données partiellement remplies Valeurs précalculées, par exemple lors de l'extraction d'une clé à partir de JSON.

Le package rejette désormais davantage de clés non valides même lorsque Validate n'est pas appelé, et Générer une clé peut désormais renvoyer de nouvelles erreurs pour les sources aléatoires cassées. Champs Primes и Précalculé les structures PrivateKey sont désormais utilisés et validés même lorsque certaines valeurs sont manquantes. Des modifications ont également été apportées à crypto/x509 pour l’analyse et l’extraction des clés RSA, décrites ci-dessous.

SignPKCS1v15 и Vérifier PKCS1v15 prend désormais en charge SHA-512/224, SHA-512/256 et SHA-3.

Générer une clé utilise désormais une méthode légèrement différente pour générer l'exposant privé (fonction Carmichael au lieu de la fonction Euler). Les applications rares qui régénèrent en externe des clés à partir de nombres premiers uniquement peuvent produire des résultats différents mais compatibles.

Les opérations sur les clés publiques et privées sont désormais jusqu'à deux fois plus rapides sur wasm.

crypto/sha*

crypto/subtil

Nouvelle fonctionnalité AvecDataIndependentTiming permet à l'utilisateur d'exécuter une fonction avec des fonctionnalités spécifiques à l'architecture activées qui garantissent que certaines instructions ne sont pas modifiées par rapport au moment de la valeur des données. Cela peut être utilisé pour garantir que le code écrit pour s'exécuter en temps constant n'a pas été optimisé par des fonctions au niveau du processeur afin qu'il s'exécute en temps variable. Actuellement, WithDataIndependentTiming utilise le bit PSTATE.DIT sur arm64 et ne fait rien sur toutes les autres architectures. Configuration de GODEBUG dataindependenttiming=1 active le mode DIT pour l'ensemble du programme Go.

conclusion XORBytes doit chevaucher complètement ou pas du tout avec l'entrée. Auparavant, le comportement était indéfini autrement, alors que maintenant XORBytes paniquera.

crypto/tls

Le serveur TLS prend désormais en charge Encrypted Client Hello (ECH). Cette fonctionnalité peut être activée en remplissant le champ. Configuration.EncryptedClientHelloKeys.

Un nouveau mécanisme d'échange de clés post-quantique X25519MLKEM768 désormais pris en charge et activé par défaut lorsque Préférences de configuration de la courbe est nul. Configuration de GODEBUG tlsmlkem=0 renvoie la valeur par défaut.

La prise en charge de l'échange de clés expérimental X25519Kyber768Draft00 a été supprimée.

L'ordre d'échange de clés est désormais entièrement géré par le package crypto/tls. Commande Préférences de configuration de la courbe est désormais ignoré et le contenu est uniquement utilisé pour déterminer les échanges de clés à inclure lorsque le champ est rempli.

Nouveau champ ClientHelloInfo.Extensions Répertorie la liste des identifiants d’extension reçus dans le message Client Hello. Cela peut être utile pour prendre les empreintes digitales des clients TLS.

crypto/x509

Configuration de GODEBUG x509sha1 a été supprimé. Certification.Vérifier ne prend plus en charge les signatures basées sur SHA-1.

OID implémente désormais les interfaces encodage.binaryappender и encodage.TextAppender.

Le champ de politique de certificat par défaut a été modifié de Certificat.Identifiants de politique sur Politiques de certificat. Lors de l'analyse des certificats, les deux champs seront renseignés, mais lors de la création d'une politique de certificat, ils seront extraits du champ Certificate.Policies au lieu de Certificate.PolicyIdentifiers. Ce changement peut être annulé. Configuration de GODEBUG x509usepolicies=0.

Créer un certificat générera désormais un numéro de série à l'aide d'une méthode conforme à la RFC 5280 lors de la transmission d'un champ de modèle Certificat.Numéro de série nul, au lieu de planter.

Certificat.Vérifier prend désormais en charge la validation des politiques telle que définie dans les RFC 5280 et RFC 9618. Nouveau champ Options de vérification. Politiques de certificat peut être défini sur un ensemble de politiques acceptables OID. Seules les chaînes de certificats avec des graphiques de politique valides seront renvoyées à partir de Certificat.Vérifier.

Clé privée MarshalPKCS8 renvoie désormais une erreur au lieu de récupérer une clé RSA non valide. (Clé privée MarshalPKCS1 n'a pas de retour d'erreur et son comportement lorsque des clés non valides sont fournies reste indéfini.)

Analyser la clé privée PKCS1 и Analyser la clé privée PKCS8 utilisez désormais et validez les valeurs CRT codées, afin de pouvoir rejeter les clés RSA non valides qui étaient auparavant acceptées. Usage Paramètres de GODEBUG x509rsacrt=0 renvoie au recalcul des valeurs CRT.

débogage/elfe

Forfait débogage/elfe Ajoute la prise en charge de la gestion des versions de symboles dans les fichiers ELF (format exécutable et pouvant être lié) dynamiques. Nouvelle méthode Fichier.DynamicVersions Renvoie une liste de versions dynamiques définies dans un fichier ELF. Nouvelle méthode Fichier.DynamicVersionNeeds Renvoie une liste des versions dynamiques requises par ce fichier ELF qui sont définies dans d'autres objets ELF. Enfin, de nouveaux domaines Symbole.HasVersion и Symbole.VersionIndex indiquer la version du symbole.

codage

Deux nouvelles interfaces Appendice de texte и Appendice binaire ont été introduits pour ajouter une représentation textuelle ou binaire d'un objet à une tranche d'octets. Ces interfaces offrent les mêmes fonctionnalités que TexteMarshaler и BinaryMarshaler, mais au lieu d'allouer une nouvelle tranche à chaque fois, ils ajoutent des données directement à une tranche existante. Ces interfaces sont actuellement implémentées par des types de bibliothèques standard qui implémentent déjà TextMarshaler et/ou BinaryMarshaler.

encodage/json

Lors de la construction, un champ de structure avec la nouvelle option omitzero dans la balise de champ de structure sera omis si sa valeur est zéro. Si le type de champ possède une méthode booléenne IsZero(), elle sera utilisée pour déterminer si la valeur est zéro. Sinon, la valeur sera zéro si elle valeur nulle pour son type. La balise de champ omitzero est plus propre et moins sujette aux erreurs que omitempty lorsque l'intention est d'omettre les valeurs nulles. En particulier, contrairement à omitempty, omitzero omet les zéros temps.temps valeurs, ce qui est une source courante de problèmes.

Si omitempty et omitzero sont tous deux spécifiés, le champ sera omis si la valeur est vide ou zéro (ou les deux).

Champ UnmarshalTypeError inclut désormais des structures intégrées pour fournir des messages d'erreur plus détaillés.

aller/types

Toutes les structures de données go/types qui exposent des séquences de paires de méthodes, comme Len() int et At(int) T, ont désormais également des méthodes qui renvoient des itérateurs, permettant un code plus simple comme celui-ci :

paramètres := fn.Type.(*types.Signature).Params() pour i := 0; je < params.Len(); i++ { utiliser(params.At(i)) }

Sur celui-ci :

pour param := plage fn.Signature().Params().Variables() { use(param) }

Les méthodes: Interface.Types intégrés Interface.Méthodes explicites Interface.Méthodes MethodSet.Méthodes Méthodes nommées Portée.Enfants Structure.Champs Tuple.Variables Liste de types.Types Liste de types de paramètres. TypeParams Union.Conditions

hacher/*

journal/slog

nouveau Gestionnaire de rejets est un gestionnaire qui n'est jamais activé et qui rejette toujours sa sortie.

Niveau и NiveauVar implémentez maintenant l'interface encodage.TextAppender.

mathématiques/*

net

ÉcouterCondig utilise désormais MPTCP par défaut sur les systèmes où il est pris en charge (actuellement uniquement Linux).

IP implémente désormais l'interface encodage.TextAppender.

réseau/http

La restriction a changé Transports aux réponses d’informations 1xx reçues en réponse à la demande. Auparavant, cela arrêtait la demande et renvoyait une erreur après avoir reçu plus de 5 réponses 1xx. Cela ne renvoie désormais une erreur que si la taille totale de toutes les réponses 1xx dépasse le paramètre de configuration Transport.MaxResponseHeaderBytes.

De plus, lorsqu'une demande comporte un hook de suivi net/http/httptrace.ClientTrace.Got1xxResponse, il n'y a désormais plus de limite au nombre total de réponses 1xx. Le hook Got1xxResponse peut renvoyer une erreur pour arrêter la requête.

Transports и Server dispose désormais d'un champ HTTP2 qui permet de configurer les paramètres du protocole HTTP/2.

Nouveaux champs Serveur.Protocoles и Protocoles de transport fournir un moyen simple de configurer les protocoles HTTP utilisés par le serveur ou le client.

Le serveur et le client peuvent être configurés pour prendre en charge les connexions HTTP/2 non chiffrées.

Quand Serveur.Protocoles contient UnencrypterHTTP2, le serveur acceptera les connexions HTTP/2 sur les ports non chiffrés. Le serveur peut accepter à la fois HTTP/1 et HTTP/2 non chiffré sur le même port.

Quand Protocoles de transport contient UnencryptedHTTP2 et ne contient pas HTTP1, le transport utilisera HTTP/2 non chiffré pour les adresses http://. Si un transport est configuré pour utiliser à la fois HTTP/1 et HTTP/2 non chiffré, il utilisera HTTP/1.

La prise en charge du protocole HTTP/2 non chiffré utilise « HTTP/2 avec apprentissage direct » (RFC 9113, section 3.3). L'en-tête obsolète « Upgrade : h2c » n'est pas pris en charge.

réseau/netip

Addr, Port d'adresse и Titre implémenter maintenant les interfaces encodage.binaryappender и encodage.TextAppender.

réseau/url

URL implémente désormais également l'interface encodage.binaryappender.

système d'exploitation/utilisateur

Sous Windows Courant peut désormais être utilisé dans Windows Nano Server. L'implémentation a été mise à jour pour éviter d'utiliser les fonctions de la bibliothèque NetApi32, qui manque à Nano Server.

Sous Windows Courant, Lookup и ID de recherche prend désormais en charge les comptes de service utilisateur intégrés suivants :

  • SYSTÈME D'AUTORITÉ NT
  • AUTORITÉ NTSERVICE LOCAL
  • SERVICE DE RÉSEAU D'AUTORITÉ NT

Sous Windows Courant a été considérablement accéléré lorsque l'utilisateur actuel est joint à un domaine lent, ce qui est un cas courant pour de nombreux utilisateurs d'entreprise. Les performances de la nouvelle implémentation sont désormais de l'ordre de quelques millisecondes, par rapport à l'implémentation précédente, qui pouvait prendre plusieurs secondes, voire plusieurs minutes, pour se terminer.

Sous Windows Courant renvoie désormais l'utilisateur propriétaire du processus lorsque le thread actuel usurpe l'identité d'un autre utilisateur. Auparavant, cela renvoyait une erreur.

regexp

Expression régulière implémente désormais l'interface encodage.TextAdapter.

d'exécution

Fonction GOROOT est désormais obsolète. Dans les environnements plus récents, vous devriez préférer utiliser le chemin système pour déterminer le binaire « go » et utiliser go env GOROOT pour déterminer GOROOT.

instruments à cordes

Forfait instruments à cordes ajoute plusieurs fonctions pour travailler avec des itérateurs :

  • Lignés Renvoie un itérateur sur les lignes séparées par des sauts de ligne dans une chaîne.
  • Séquence divisée renvoie un itérateur sur toutes les sous-chaînes d'une chaîne séparées par un séparateur.
  • SéparerAprèsSéquence renvoie un itérateur sur les sous-chaînes d'une chaîne, divisées après chaque occurrence du séparateur.
  • ChampsSeq renvoie un itérateur sur des sous-chaînes d'une chaîne autour de séquences de caractères d'espacement, comme définiunicode.EstSpace
  • ChampsFuncSeq Renvoie un itérateur sur des sous-chaînes de chaîne autour de séquences de points de code Unicode qui satisfont un prédicat.

synchroniser

exécution sync.map a été modifié pour améliorer les performances, en particulier pour les modifications de dictionnaire. Par exemple, les conflits de changement d'ensemble disjoint sont moins probables sur les dictionnaires volumineux et il n'est plus nécessaire de créer un temps de chargement pour obtenir un dictionnaire à faible conflit.

Si vous rencontrez des problèmes, définissez GOEXPERIMENT=nosynchashtriemap pendant la construction pour revenir à l'ancienne implémentation et veuillez remplir le formulaire de problème.

vers les tests

Nouvelles méthodes T.Context и B.Context renvoie un contexte qui est supprimé une fois le test terminé et avant l'exécution des fonctions de nettoyage du test.

Nouvelles méthodes T.Chdir и B.Chdir peut être utilisé pour modifier le répertoire de travail pendant la durée d'un test ou d'un benchmark.

texte/modèle

Les modèles prennent désormais en charge range-over-func et range-over-int.

Paisible

Heure implémente désormais les interfaces encodage.binaryappender и encodage.TextAppender.

Ports

Linux

Comme c'était annoncé Selon les notes de publication de Go 1.23, Go 1.24 nécessite la version 3.2 ou ultérieure du noyau Linux.

Darwin

Go 1.24 est la dernière version qui fonctionnera sur macOS 11 Big Sur. Go 1.25 nécessitera macOS 12 Monterey ou une version ultérieure.

WebAssembly

La directive du compilateur go:wasmexport a été ajoutée aux programmes Go pour exporter des fonctions vers l'hôte WebAssembly.

Dans WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm), Go 1.24 prend en charge la création d'un programme Go en tant que réacteur/bibliothèque en spécifiant l'indicateur de construction -buildmode=c-shared.

Davantage de types sont désormais autorisés comme types d'arguments ou de résultats pour les fonctions go:wasmimport. En particulier, les bools, les strings, les uintptr et les pointeurs vers certains types sont autorisés (voir les détails dans documentation), ainsi que les types entiers et à virgule flottante 32 bits et 64 bits, et unsafe.Pointer, qui sont déjà autorisés. Ces types sont également autorisés comme types d'arguments ou de résultats pour les fonctions go:wasmexport.

Les fichiers de support pour WebAssembly ont été déplacés vers lib/wasm depuis misc/wasm.

L'empreinte mémoire initiale est considérablement réduite, en particulier pour les petites applications WebAssembly.

Windows

Le port Windows/ARM 32 bits (GOOS=windows GOARCH=arm) a été marqué comme cassé. Détails dans #70705

Source: linux.org.ru

Ajouter un commentaire