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 !

L'équipe en charge du développement du langage Go annonce la disponibilité de Go version 1.13
Avec de son lot de changements par rapport à la version 1.12

Le , par Christian Olivier

196PARTAGES

10  0 
La dernière version du langage Go, la version 1.13, développé par Google vient d’être officialisée, six mois après Go 1.12. La plupart des changements annoncés concernent l’implémentation de la chaîne d’outils, du runtime et des bibliothèques Go v1.13 utilise désormais un proxy Golang pour récupérer les modules. Cela signifie qu’un proxy régi par les règles de confidentialité du géant Google recueille désormais par défaut l’utilisation de tous les modules, sauf si vous modifiez les paramètres. Go 1.13 est également la dernière qui fonctionnera sur Native Client (NaCl). Elle prend en charge TLS 1.3 par défaut dans le paquet crypto/tls, ce qui peut être désactivé en ajoutant la valeur tls13=0 à la variable d’environnement GODEBUG. Par ailleurs, le nouveau paquet crypto/ed25519 implémente le schéma de signature Ed25519.



Portages

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

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

Avatar de Gugelhupf
Modérateur https://www.developpez.com
Le 04/09/2019 à 22:03
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 ?
J'utilise Go pour mes projets personnels, j'ai notamment développé mon propre framework web (minimaliste).
Le seul inconvénient que je trouve au langage (pour le moment) est le manque des templates/generics. Le manque de la gestion des exceptions ne me dérange pas plus que cela, je suis plutôt satisfait de la gestion des erreurs avec les tuples. Ce sont des features qui sont prévues pour la prochaine version il me semble, reste à voir si la syntaxe proposée va plaire à la communauté.

J'ai remarqué un engouement assez flagrant autour du langage Rust en ce moment, ses performances sont proches de C et C++, tandis qu'en terme de perf Go fait à peine mieux que Java et C# (sauf en ce qui concerne la consommation de mémoire qui est très réduite). Go possède tout de même des avantages non négligeables, c'est un langage plus simple à apprendre que Rust, possède plus d'API standard, compile très vite, de nombreux projets (Docker, Terraform etc) sont écrits en Go aussi, à voir si Google compte maintenir ce langage.
2  0 
Avatar de dolanor
Membre habitué https://www.developpez.com
Le 13/11/2019 à 1:29
étant donné qu'une bonne partie de la gestion de GCP passe par Go, sans compter Kubernetes qui s'est installé sur tous les clouds et autre startup qui a scalé, je ne vois pas Go perdre du soutien de Google.
Les generics devraient arriver dans moins de 2 ans (ils en sont à la 6ème ou 7ème implémentation et commencent à avoir un semblant de spec que beaucoup de monde apprécie. Il y a un épisode GoTime dessus.
Les modules qui arrivent par défaut sont un peu béta encore, mais on arrive enfin à une gestion des dépendances plus saine, même si auparavant, des outils comme glide, dep, ou avoir 1 workspace par projet ou vendoring pouvaient faire l'affaire.

6 ans que je fais du Go dont 5 ans professionnellement à 100% et c'est toujours autant un plaisir.
Mon seul regret c'est que beaucoup de gens viennent sur Go grâce à la communication sur les microservices, et en effet, Go est roi sur ce sujet, mais si une équipe est petite, des microservices seront toujours overkill pour ma part. Je vois vraiment plus les microservices comme un outil organisationnel plutôt que technique. D'autant que techniquement, Go tient beaucoup de charge sur 1 seule machine du à sa gestion efficace de la concurrence. Genre gérer 10M de websockets pour de l'iot http://goroutines.com/10m .
0  0