IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Go 1.20 est disponible avec la prise en charge initiale de PGO et le support expérimental de FreeBSD sur RISC-V,
Et est la dernière version supportant Windows 7 / 8 / Server 2008 / Server 2012

Le , par Bill Fassinou

56PARTAGES

5  0 
Google vient de publier la version 1.20 du langage de programmation Go (Golang), un langage de programmation open source conçu pour créer des logiciels fiables et efficaces. Go 1.20 apporte quelques ajouts notables au niveau des outils et des fonctionnalités du langage. L'optimisation guidée par les profils (PGO - profile-guided optimization) lors de la compilation est particulièrement remarquable. Cette version est la dernière à prendre en charge certaines anciennes versions de Windows et macOS. Voici ci-dessous les changements notables dans Go 1.20.

Langage

Go 1.20 inclut quatre changements dans le langage. Go 1.17 avait ajouté les conversion d'une tranche vers un pointeur de tableau. Go 1.20 étend cela pour permettre les conversions d'une tranche vers un tableau : étant donné une tranche x, [4]byte(x) peut maintenant être écrit au lieu de *(*[4]byte)(x). En outre, le paquetage unsafe définit trois nouvelles fonctions : SliceData, String, et StringData. Avec la fonction Slice de Go 1.17, ces fonctions offrent maintenant la possibilité complète de construire et de déconstruire des valeurs de type tranche et chaîne, sans dépendre de leur représentation exacte.

La spécification définit maintenant que les valeurs struct sont comparées un champ à la fois, en considérant les champs dans l'ordre où ils apparaissent dans la définition du type struct, et en s'arrêtant à la première non-concordance. Auparavant, la spécification pouvait être lue comme si tous les champs devaient être comparés au-delà de la première discordance. De même, la spécification définit maintenant que les valeurs des tableaux sont comparées un élément à la fois, dans l'ordre croissant des index. Dans les deux cas, la différence affecte le fait que certaines comparaisons doivent paniquer.



Les programmes existants restent inchangés : la nouvelle formulation de la spécification décrit ce que les implémentations ont toujours fait. Les types comparables (tels que les interfaces ordinaires) peuvent maintenant satisfaire les contraintes comparables, même si les arguments de type ne sont pas strictement comparables. Cela permet d'instancier un paramètre de type contraint par comparable (par exemple, un paramètre de type pour une clé de carte générique définie par l'utilisateur) avec un argument de type non strictement comparable tel qu'un type d'interface, ou un type composite contenant un type d'interface.

Ports

Windows

Go 1.20 est la dernière version qui fonctionnera sur toutes les versions de Windows 7, 8, Server 2008 et Server 2012. Go 1.21 nécessitera au moins Windows 10 ou Server 2016.

Darwin et iOS

Go 1.20 est la dernière version qui fonctionnera sur macOS 10.13 High Sierra ou 10.14 Mojave. La version 1.21 de Go nécessitera macOS 10.15 Catalina ou une version ultérieure.

FreeBSD/RISC-V

Go 1.20 ajoute un support expérimental pour FreeBSD sur RISC-V (GOOS=freebsd, GOARCH=riscv64).

Outils

Commande Go

Le répertoire $GOROOT/pkg ne stocke plus les archives de paquets précompilés pour la bibliothèque standard : go install ne les écrit plus, go build ne les vérifie plus, et la distribution Go ne les fournit plus. Au lieu de cela, les paquets de la bibliothèque standard sont construits selon les besoins et mis en cache dans le cache de construction, tout comme les paquets hors GOROOT. Ce changement réduit la taille de la distribution Go et évite également le déséquilibre de la chaîne d'outils C pour les paquets qui utilisent cgo.

L'implémentation de go test -json a été améliorée pour la rendre plus robuste. Les programmes qui exécutent go test -json n'ont pas besoin de mises à jour. Les programmes qui invoquent directement l'outil go test2json doivent maintenant exécuter le binaire de test avec -v=test2json (par exemple, go test -v=test2json ou ./pkg.test -test.v=test2json) au lieu du simple -v. Un changement lié à go test -json est l'ajout d'un événement dont l'action est définie pour démarrer au début de l'exécution de chaque programme de test.

Lors de l'exécution de plusieurs tests à l'aide de la commande go, ces événements de démarrage sont garantis d'être émis dans le même ordre que les paquets nommés sur la ligne de commande. La commande go définit désormais des balises de construction de caractéristiques d'architecture, telles que amd64.v2, pour permettre de sélectionner un fichier d'implémentation de paquet en fonction de la présence ou de l'absence d'une caractéristique d'architecture particulière. Les sous-commandes go acceptent désormais -C <dir> pour changer le répertoire en <dir> avant d'exécuter la commande.

Cela peut être utile pour les scripts qui doivent exécuter des commandes dans plusieurs modules différents. Les commandes go build et go test n'acceptent plus le drapeau -i, qui est déprécié depuis Go 1.16. La commande go generate accepte désormais -skip <pattern> pour ignorer les directives //go:generate correspondant à <pattern>. La commande go test accepte désormais -skip <pattern> pour ignorer les tests, sous-tests ou exemples correspondant à <pattern>.

go version

La commande go version -m prend désormais en charge la lecture d'un plus grand nombre de types de binaires Go, notamment les DLL Windows construites avec go build -buildmode=c-shared et les binaires Linux sans autorisation d'exécution.

Cgo

La commande go désactive désormais cgo par défaut sur les systèmes ne disposant pas d'une chaîne d'outils C. Plus précisément, lorsque la variable d'environnement CGO_ENABLED n'est pas définie, que la variable d'environnement CC n'est pas définie et que le compilateur C par défaut (généralement clang ou gcc) n'est pas trouvé dans le chemin d'accès, CGO_ENABLED prend la valeur 0 par défaut.

L'effet le plus important de ce changement par défaut est que lorsque Go est installé sur un système sans compilateur C, il utilisera désormais des constructions Go pures pour les paquets de la bibliothèque standard qui utilisent cgo, au lieu d'utiliser les archives de paquets prédistribuées (qui ont été supprimées, comme indiqué ci-dessus) ou d'essayer d'utiliser cgo et d'échouer. Cela permet à Go de mieux fonctionner dans certains environnements de conteneurs minimaux ainsi que sur macOS, où les archives de paquets prédistribuées ne sont plus utilisées pour les paquets basés sur cgo depuis Go 1.16.

Les paquets de la bibliothèque standard qui utilisent cgo sont net, os/user et plugin. Sous macOS, les paquets net et os/user ont été réécrits pour ne pas utiliser cgo : le même code est maintenant utilisé pour les constructions cgo et non cgo ainsi que pour les compilations croisées. Sous Windows, les paquets net et os/user n'ont jamais utilisé cgo. Sur les autres systèmes, les compilations avec cgo désactivé utiliseront une version purement Go de ces paquets.

Sous macOS, le détecteur de course a été réécrit pour ne pas utiliser cgo : les programmes avec détecteur de course peuvent être construits et exécutés sans Xcode. Sous Linux et d'autres systèmes Unix, ainsi que sous Windows, une chaîne d'outils C hôte est nécessaire pour utiliser le détecteur de course.

Cover

Go 1.20 supporte la collecte de profils de couverture de code pour les programmes (applications et tests d'intégration), par opposition aux seuls tests unitaires. Pour collecter des données de couverture pour un programme, construisez-le avec l'option -cover de go build, puis exécutez le binaire résultant avec la variable d'environnement GOCOVERDIR définie sur un répertoire de sortie pour les profils de couverture.

Vet

L'outil vet signale maintenant les références aux variables de boucle suite à un appel à T.Parallel() dans les corps de fonctions de sous-tests. Ces références peuvent observer la valeur de la variable d'une itération différente (ce qui entraîne généralement le saut de cas de test) ou un état invalide dû à un accès concurrent non synchronisé.

En outre, l'outil vet signale désormais l'utilisation du format de temps 2006-02-01 (yyyy-dd-mm) avec Time.Format et time.Parse. Ce format n'apparaît pas dans les standards de date courants, mais est fréquemment utilisé par erreur lors de la tentative d'utiliser le format de date ISO 8601 (aaaa-mm-jj).

Runtime

Certaines structures de données internes du ramasse-miettes ont été réorganisées pour être plus efficaces en termes d'espace et de CPU. Ce changement réduit les frais généraux de mémoire et améliore les performances globales du CPU jusqu'à 2 %. Le ramasse-miettes se comporte de manière moins erratique en ce qui concerne l'assistance des goroutines dans certaines circonstances. Go 1.20 ajoute un nouveau paquet [C...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !