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 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.