Les programmes Go sont maintenant compatibles avec Android 10. Go 1.13 nécessite maintenant macOS 10.11 El Capitan ou une version ultérieure, FreeBSD 11.2 ou version ultérieure et la version Windows spécifiée par les fichiers binaires Windows liés en interne est désormais Windows 7 plutôt que Windows NT 4.0.
Go supporte maintenant Illumos avec GOOS=illumos. AIX sur PPC64 (aix/ppc64) prend désormais en charge cgo, la liaison externe et les modes de build c-archive et pie. Pour GOARCH=wasm, la nouvelle variable d’environnement GOWASM prend une liste de fonctions expérimentales séparées par des virgules avec lesquelles le binaire est compilé.
Changements apportés au langage
En plus des changements minimes affectant la bibliothèque, Go 1.13 élimine la nécessité de recourir à de nombreuses conversions « ;uint ;» artificielles et prend en charge un ensemble de préfixes littéraux numériques plus uniforme et plus moderne :
- les littéraux entiers binaires : le préfixe 0b ou 0B indique un littéral entier binaire tel que 0b1011 ;;
- les littéraux entiers octaux : le préfixe 0o ou 0O indique un littéral entier octal tel que 0o660. La notation octale existante indiquée par un 0, suivie de chiffres octaux, reste valide ;;
- les littéraux hexadécimaux à virgule flottante : le préfixe 0x ou 0X peut maintenant être utilisé pour exprimer la mantisse d’un nombre à virgule flottante au format hexadécimal tel que 0x1.0p-1021. Un nombre hexadécimal à virgule flottante doit toujours avoir un exposant, écrit sous la forme de la lettre p ou P suivi d’un exposant en décimal. L’exposant met à l’échelle la mantisse de 2 à la puissance de l’exposant ;;
- les littéraux imaginaires : le suffixe imaginaire i peut désormais être utilisé avec n’importe quel entier (binaire, décimal, hexadécimal) ou littéral à virgule flottante ;;
- les séparateurs de chiffres : les chiffres de n’importe quel littéral numérique peuvent maintenant être séparés (groupés) à l’aide de traits de soulignement, tels que 1_000_000, 0b_1010_0110 ou 3.1415_9265. Un trait de soulignement peut apparaître entre deux chiffres ou entre le préfixe littéral et le premier chiffre.
Ces modifications ont été implémentées par le biais de changements apportés au compilateur et aux packages de bibliothèque go/scanner et text/scanner (nombres littéraux) et go/types.
Concernant les modules
La variable d’environnement GO111MODULE continue reste par défaut sur « ;auto ;», mais le paramètre auto active maintenant le mode module-aware de la commande go chaque fois que le répertoire de travail actuel contient, ou est sous un répertoire contenant, un fichier go.mod, même si le répertoire actuel est dans GOPATH/src. Ce changement devrait simplifier la migration du code existant au sein de GOPATH/src et la maintenance continue des modules-aware packages aux côtés des importateurs non-module-aware.
La nouvelle variable d’environnement GOPRIVATE indique les chemins des modules qui ne sont pas accessibles au public. Elle sert de valeur par défaut pour les variables de bas niveau GONOPROXY et GONOSUMDB qui fournissent un contrôle plus fin sur les modules qui sont récupérés par proxy et vérifiés à l’aide de la base de données de checksum.
La variable d’environnement GOPROXY peut maintenant être définie sur une liste d’URL de proxys séparés par des virgules et sa valeur par défaut est maintenant « ;https://proxy.golang.org,direct ;». Lors de la résolution du chemin d’accès d’un paquet à son module contenant, la commande go essaiera tous les chemins de modules candidats sur chaque proxy de la liste à la suite. Un proxy injoignable ou un code d’état HTTP autre que 404 ou 410 met fin à la recherche sans consulter les autres proxys.
La nouvelle variable d’environnement GOSUMDB identifie le nom et éventuellement la clé publique et l’URL du serveur de la base de données à consulter pour les sommes de contrôle des modules qui ne figurent pas encore dans le fichier go.sum du module principal. Si GOSUMDB n’inclut pas d’URL explicite, l’URL est choisie en sondant les URL GOPROXY. Si GOSUMDB est désactivé, la base de données des sommes de contrôle n’est pas consultée et seules les sommes de contrôle existantes dans le fichier go.sum sont vérifiées. Les utilisateurs qui ne peuvent pas accéder à la base de données proxy et à la base de données des sommes de contrôle par défaut (par exemple, en raison d’un pare-feu ou d’une configuration bac à sable) peuvent désactiver ce mécanisme en réglant GOPROXY sur « ;direct ;», et/ou GOSUMDB sur « ;off ;».
En mode module-aware, la sous-commande go get supporte maintenant le suffixe de version @patch qui indique que le module nommé ou le module contenant le paquet nommé doit être mis à jour vers la version de patch la plus élevée avec les mêmes versions majeures et mineures que la version trouvée dans la liste de compilation. Par défaut, « ;go get -u ;» en mode module met à jour uniquement les dépendances non-test, comme en mode GOPATH. Il accepte maintenant aussi l’option -t, qui (comme en mode GOPATH) permet d’inclure les paquets importés par les tests des paquets nommés sur la ligne de commande. « ;go get -u ;» (sans arguments supplémentaires) permet de mettre à jour uniquement les importations transitives du paquet dans le répertoire courant. Pour mettre à jour tous les paquets importés de manière transitoire par le module principal (y compris les dépendances de test), utilisez « ;go get -u all ;». La sous-commande go get ne supporte plus l’indicateur -m, alors que l'indicateur -d reste supporté et continue à provoquer l’arrêt du téléchargement du code source nécessaire pour construire les dépendances des paquets nommés.
La commande go env accepte maintenant un indicateur -w pour définir la valeur par défaut par utilisateur d’une variable d’environnement reconnue par la commande go, et un indicateur -u correspondant pour annuler une valeur par défaut précédemment définie. Les valeurs par défaut définies via go env -w sont stockées dans le fichier go/env dans os.UserConfigDir().
La commande go version accepte maintenant les arguments nommant les exécutables et les répertoires. Lorsqu’elle est invoquée sur un exécutable, go version imprime la version de Go utilisée pour construire l’exécutable. Si l’indicateur -m est utilisé go version imprime les informations de version du module intégré de l’exécutable, si disponible. Lorsqu’elle est invoquée sur un répertoire, go version imprime des informations sur les exécutables contenus dans le répertoire et ses sous-répertoires.
Le nouveau drapeau go build -trimpath supprime tous les chemins du système de fichiers de l’exécutable compilé, pour améliorer la reproductibilité de la compilation. Si l’option -o passed to go build fait référence à un répertoire existant, go build écrira maintenant des fichiers exécutables dans ce répertoire pour les paquets principaux correspondant à ses arguments de paquets. L’option go build flag -tags prend maintenant une liste de balises de construction séparées par des virgules, pour permettre la création de plusieurs balises dans GOFLAGS. La forme séparée par espaces est obsolète, mais toujours reconnue et sera maintenue. L'option go generate now définit la balise generate build afin que les fichiers puissent être recherchés pour les directives, mais ignorés pendant la compilation.
Le compilateur n’émet plus de constantes flottantes ni de constantes complexes dans les fichiers go_asm.h. De plus, il bénéficie d’une nouvelle implémentation de l’analyse d’échappement qui se veut plus précise. Mais cette précision accrue peut empêcher l’exécution d’un code non valide qui fonctionnait auparavant : par exemple, un code enfreignant les règles de sécurité unsafe.Pointer. Si vous notez des régressions qui semblent liées à cette évolution, vous pouvez réactiver l’ancien mode d’analyse d’échappement avec go-build -gcflags=all=-newescape=false. Retenez toutefois que cet ancien mode d’analyse sera supprimé dans les versions ultérieures de Go. L’assembleur, de son côté, prend désormais en charge de nombreuses instructions atomiques introduites dans ARM v8.1.
gofmt et go fmt canonisent maintenant les préfixes et exposants littéraux des nombres pour utiliser des lettres minuscules, mais laisse les chiffres hexadécimaux seuls. Ceci améliore la lisibilité lors de l’utilisation du nouveau préfixe octal (0O devient 0o) et la réécriture est appliquée de manière cohérente. Par ailleurs, gofmt supprime maintenant les zéros de tête inutiles d’un nombre entier décimal imaginaire littéral. Pour les besoins de rétrocompatibilité, un nombre entier imaginaire littéral commençant par 0 est considéré comme un nombre décimal et non comme un nombre octal. Par exemple, 0B1010, 0XabcDEF, 0O660, 1.2E3, et 01i deviennent 0b1010, 0xabcDEF, 0o660, 1.2e3, et 1i après avoir appliqué gofmt.
Runtime
En ce qui concerne le Runtime, cette version améliore d'environ 30 % les performances de la plupart des utilisations de « ;defer ;» ainsi que les notifications, lors de la survenue de paniques. Comme sur Go 1.12, le runtime est désormais plus agressif lorsqu'il s'agit de restituer de la mémoire au système d’exploitation afin de la rendre disponible pour les autres applications. La liste détaillée des modifications apportées à Go v1.13 est disponible sur le site de l’éditeur.
Source : Golang
Et vous ?
Utilisez-vous le langage Go ?
Quels sont ses avantages et ses inconvénients, d’après vous ?
Que pensez-vous des nouveautés introduites dans cette nouvelle version ?
Voir aussi
L'équipe de Go publie des brouillons du design du langage Go 2, au menu : la généricité, la gestion des erreurs et la sémantique des valeurs d'erreur
« Pourquoi on est repassé de Go à PHP ? », Danny van Kooten, l'éditeur de MailChimp nous livre les raisons de ce rebasculement
Le langage Go continue sa progression avec de nombreux développeurs qui l'utilisent dans les projets professionnels et personnels, selon un sondage
GoLand 2019.1 disponible, l'EDI de JetBrains pour le développement en Go, s'enrichit de nouveaux outils de profilage et améliore le débogage et plus