La version 1.12 du langage Go de Google (Golang), désormais disponible en version bêta, apporte essentiellement des changements dans l'implémentation de la chaîne d'outils, du runtime et des bibliothèques. La sortie de la version de production est prévue pour février 2019.

Les nouveautés à venir de Go 1.12

Dans la chaîne d'outils du compilateur, la capacité d'analyse des variables en temps réel a été améliorée. Cela peut signifier que les finaliseurs seront exécutés plus tôt que dans les versions précédentes. Si c'est un problème, les développeurs devraient considérer l'ajout d'un appel runtime.KeepAlive. Un problème connu dans le ramasse-miette peut provoquer de rares pannes. Il est recommandé aux utilisateurs de signaler tout problème en passant par l'outil de suivi des problèmes de Go.

Nouvelles fonctionnalités et améliorations de Go 1.12

- Lorsque GO111Module est activé, la commande go prend en charge les opérations compatibles avec les modules en dehors d'un répertoire de modules, à condition que ces opérations n'aient pas besoin de résoudre les chemins d'importation relatifs au répertoire courant ou de modifier explicitement le fichier mod.

- Les commandes go qui permettent de télécharger et d'extraire des modules peuvent être invoquées simultanément et en toute sécurité. Le cache du module (GOPATH/pkg/mod) doit résider dans un système de fichiers supportant le verrouillage des fichiers.

- Les performances de balayage du runtime ont été améliorées quand une grande partie du heap reste active, réduisant le temps d'attente de l'allocation après une récupération de mémoire.

- Le runtime restitue la mémoire vers le système d'exploitation de manière plus offensive, en particulier pour répondre à des allocations importantes qui ne peuvent pas réutiliser l'espace de stockage existant. Sous Linux, le runtime ne libère de la mémoire dans le système d'exploitation que lorsque celui-ci est sous pression mémoire.

- Le détecteur de situation de compétition de Go, qui sert à identifier les conditions de compétition dans le code, est désormais supporté sur l'architecture Linux ARM64.

- Le cache de compilation est maintenant requis comme étape pour éliminer $GOPATH/pkg. En définissant la variable d'environnement, GOCACHE=Off provoque l'échec des commandes qui écrivent dans le cache.

- L'outil de traçage permet de tracer les courbes d'utilisation des mutateurs, y compris les références croisées à la courbe d'exécution. Cela permet d'analyser l'impact du ramasse-miette sur la latence et le débit de l'application.

- La bibliothèque principale ajoute le support du paquet crypto/tls pour TLS (Transport Layer Security) 1.3.

- Dans le paquet bufio, qui implémente les I/O en tampon, les méthodes UnreadRunE et UnreadByte du lecteur retournent une erreur si elles sont appelées après Peek.

La version bêta de Go 1.12 est téléchargeable depuis le site web du projet, aussi bien les distributions source que binaires. Les utilisateurs actuels de Go peuvent passer par la commande :

$ go get golang.org/dl/go1.12beta1

$ go1.12beta1 download

La version de production 1.11 de Go est également téléchargeable sur le site du projet.