Go 1.7 a significativement amélioré les temps de compilation, ainsi que la performance d'exécution, comme l'indique l'ingénieur Google Chris Broadfoot. Il ajoute également des tests et des jeux d'essai hiérarchiques, et un support officiel de Linux sur les zSystems IBM (s390x).
Comme InfoQ l'a rapporté, les améliorations du compilateur Go dans sa version 1.7 sont majoritairement liées au nouveau backend du compilateur pour la plateforme amd64 basé sur l'affectation unique statique (SSA). Le nouveau backend génère un code plus rapide et plus compact grâce à un certain nombre d'optimisations avancées, y compris la suppression de la vérification des bornes et la suppression des sous-expressions communes. Le jeu d'essai de Google montre une accélération de 5-35% à l'exécution, alors que le temps de compilation et la taille du binaire ont été réduits jusqu'à 20-30%. En l'occurrence, les jeux d'essai peuvent varier énormément et quelques utilisateurs de Hacker News ont annoncé des doublements du temps de construction.
Comme mentionné, le nouveau backend SSA est disponible uniquement pour la plateforme AMD. Toutefois, sa généralisation à toutes les architectures supportées est l'un des enjeux majeurs de Go 1.8, d'après l'ingénieur Google Brad Fitzpatrick. Il ajoute que se débarrasser du vieux backend devrait également rendre possible la simplification du frontend, qui assume actuellement qu'un backend moins capable est disponible et doit fournir plus d'efforts. Cela devrait probablement apporter encore plus d'améliorations de performance. On peut trouver plus de détails sur Go 1.8, dont la livraison est prévue en février 2017, sur le forum GoLang Dev.
Parmi les autres changements notables apportés par Go 1.7, on trouve les sous-tests et les sous-jeux d'essai qui rendent possible la définition de tests hiérarchiques et de jeux d'essai pilotés par les tables. Ceci est réalisé en spécifiant une liste d'expressions régulières séparées par des slashs en tant qu'arguments des options -run
et -bench
. Par example :
go test -run Foo # Run top-level tests matching "Foo".
go test -run Foo/A= # Run subtests of Foo matching "A=".
go test -run /A=1 # Run all subtests of a top-level test matching "A=1".
Enfin, Go 1.7 a adopté le paquetage context comme partie intégrante de la librairie standard, ce qui rend plus aisée l'activation de l'annulation et du timeout, ainsi que le passage de données limité au périmètre de la requête lorsque l'on fait des appels réseaux. Go 1.7 a également standardisé l'utilisation de répertoires de vendeur permettant aux développeurs d'utiliser des copies locales de dépendances externes au lieu de celles récupérées automatiquement depuis le GOPATH
ou de la librairie standard.
Pour une vue complète des ajouts, des améliorations et des corrections dans Go 1.7, on peut se référer aux notes de version.