Journal des mises à jour Go
Versions de maintenance :
- go1.25, première publication : 2025-08-12, dernière mise à jour : go1.25.0 (2025-08-12)
- go1.24, première publication : 2025-02-11, dernière mise à jour : go1.24.6 (2024-08-06)
Journal des mises à jour officiel du langage Go : Release History - The Go Programming Language
Go utilise le versionnage sémantique pour l'identification des versions, au format vversion majeure.version mineure.version de correctif (voir Semantic Versioning), une mise à jour de version majeure signifie un Breaking Change, c'est-à-dire une mise à jour non rétrocompatible, une mise à jour de version mineure signifie l'ajout de nouvelles fonctionnalités tout en restant rétrocompatible, une mise à jour de version de correctif signifie qu'un problème a été corrigé tout en restant rétrocompatible.
L'équipe Go publie une version mineure tous les six mois, et seules les deux dernières versions mineures sont maintenues à long terme, avec une durée de maintenance de six mois. Étant donné que chaque mise à jour de Go maintient une compatibilité assez élevée, il est recommandé de mettre à niveau Go vers la dernière version dès que la nouvelle version est stable.
La dernière proposition de Go2.0 a été présentée le 19 novembre 2018, à l'époque c'était la version go1.13, cinq ans plus tard, la version a été itérée jusqu'à go1.21, les diverses idées de Go2.0 ont été intégrées dans Go1.0 par le biais de mises à jour incrémentielles, et l'un des fondateurs a également clairement indiqué qu'il n'y aurait probablement pas de Go2.0 à l'avenir, et que Go continuerait à s'efforcer de maintenir la rétrocompatibilité (voir Go 1 and the Future of Go Programs).
Note
Cette page n'est qu'une simple reprise du journal officiel, mise à jour de manière irrégulière, pour obtenir les dernières nouvelles, veuillez vous rendre sur le site officiel.
1.25
Première publication : 2025-08-12
Dernière mise à jour : go1.25.0 (2025-08-12)
Le journal des mises à jour détaillé de la version go1.25 peut être consulté sur Go 1.25 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.25 - Release Patch.
Niveau du langage
- Suppression du concept de type de base (core type) dans les génériques, voir l'article officiel Goodbye core types
Bibliothèque standard
- Ajout de
test/synctest, utilisé pour tester le code concurrent - Ajout de la bibliothèque expérimentale
encoding/json/v2, comprenant :encoding/json/v2, la vitesse de désérialisation est améliorée de 2 à 10 fois par rapport à v1, voir les benchmarks sur go-json-experiment/jsonbenchencoding/json/jsontext, fournit la capacité d'interagir à bas niveau avec les chaînes JSON
Chaîne d'outils
- Les futures versions de Go incluront un petit nombre d'outils binaires pré-construits
- go mod ajoute la directive
ignore, utilisée pour spécifier les dossiers que la commande go doit ignorer go doc -httppeut démarrer un serveur HTTP local pour consulter la documentation du code- go vet, ajout des analyseurs
waitgroupethostport - Lorsque la ligne de commande go met à jour la version go dans
go.modougo.work, elle n'ajoute plus la version de la chaîne d'outils go spécifiée
Exécution
GOMAXPROCS détectera la limite CPU du conteneur dans un environnement conteneurisé
Nouvelle GC expérimentale
greenteagc, l'unité de planification de base de la GC passe de object à memory spanLorsqu'une panic n'est pas capturée, elle n'est plus imprimée en double
panic: PANIC [recovered] panic: PANICdevient
panic: PANIC [recovered, repanicked]Ajout de
runtime/trace.FlightRecorder, capable de capturer de manière plus légère les informations d'exécution en continu
Compilateur
Correction du bug de vérification différée du pointeur nul de 1.21 (différé après la vérification d'erreur), le code suivant qui pose clairement problème pouvait s'exécuter normalement avant la version 1.25
gopackage main import "os" func main() { f, err := os.Open("nonExistentFile") name := f.Name() if err != nil { println("should panic") // Cette ligne était affichée avant 1.25 return } println(name) }Le compilateur réservera plus de mémoire de secours pour les slices situées sur la pile afin d'améliorer les performances d'utilisation
Prise en charge de la génération d'informations de débogage DWARF5
1.24
Première publication : 2025-02-11
Dernière mise à jour : go1.24.6 (2025-08-06)
Le journal des mises à jour détaillé de la version go1.24 peut être consulté sur Go 1.24 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.24 - Release Patch.
Niveau du langage
Alias de type générique, permet de créer des alias pour les types génériques, ce qui est très utile lors de la référence de types génériques définis par des tiers, par exemple
goimport ( "other" ) type MyQuque[T any] = other.Queue[T]
Bibliothèque standard
- Ajout du package
weak: fournit des pointeurs faibles (Weak Pointers), permettant de référencer des objets sans augmenter le comptage de références, évitant les fuites de mémoire dues au cache, il faut vérifier si le pointeur estnilavant utilisation - Restriction d'accès au système de fichiers : introduction du type
os.Root, limitant les opérations de fichier à un répertoire spécifique, améliorant la sécurité - Prise en charge du chiffrement et du hachage : ajout des packages
crypto/mlkem,crypto/hkdf,crypto/pbkdf2etcrypto/sha3, optimisation des performances des algorithmes de chiffrement existants - Ajout de la fonction de benchmark
testing.B.Looppour de meilleurs tests de boucle encoding/json: ajout du tagomitzero, prise en charge du filtrage des valeurs nulles basé sur la méthodeIsZero()stringsetbytes: ajout de fonctions itératives (commeLines,SplitSeq,FieldsSeq)
Exécution
- Refonte de la map intégrée basée sur Swiss Tables, la vitesse d'accès aux grandes maps est améliorée de 30%, la vitesse d'itération est améliorée de 10% à 60%
sync.Maputilise désormais un Trie de hachage concurrent (hash-trie) pour optimiser les performances, en particulier dans les cas d'écriture concurrente- Les mutex internes de l'exécution utilisent une nouvelle implémentation spinbit, réduisant la contention de verrou et améliorant les performances dans les scénarios de haute concurrence
- Optimisation de la stratégie d'allocation de petits objets, réduction de la fragmentation de la mémoire et des temps de pause GC
- Ajout de
runtime.AddCleanuppour remplacerruntime.SetFinalizer, prise en charge de l'enregistrement de plusieurs fonctions de nettoyage pour un objet, exécutées séquentiellement dans une goroutine indépendante
Cgo
- Prise en charge des annotations
#cgo noescapeet#cgo nocallback, déclarant respectivement qu'une fonction C n'échappe pas la mémoire et ne rappelle pas de fonctions Go, améliorant les performances d'exécution - Cgo refusera désormais de compiler les appels à des fonctions C ayant plusieurs déclarations incompatibles, détection stricte des déclarations de fonctions C incompatibles entre fichiers (comme
void f(int)etvoid f(double)), évitant la génération de séquences d'appel erronées
Chaîne d'outils
- Gestion des dépendances d'outils de module : suivi des dépendances d'outils via la directive tool de go.mod, remplaçant le schéma d'importation vide traditionnel de tools.go
- Sortie structurée : go build et go test prennent en charge le drapeau -json, produisant des résultats de build et de test au format JSON
- Optimisation de la compilation et de l'édition de liens : amélioration de l'efficacité de génération de code du compilateur, le linker génère par défaut un GNU Build ID (plateforme ELF) et un UUID (macOS)
- Interdiction de contourner les restrictions de définition de méthode pour les types générés par CGO via des alias
go buildintègre automatiquement les informations du système de contrôle de version dans le fichier binaire (prise en charge de la désactivation avec-buildvcs=false)- La variable d'environnement
GOAUTHprend en charge l'authentification des modules privés. go.modprend en charge la directivetoolpour gérer les dépendances exécutables, remplaçant les imports vides detools.go- Ajout du paramètre
go get -toolet de la commandego install toolpour gérer les dépendances d'outils de module - Le cache de build prend en charge le cache binaire pour
go runetgo tool objdumpprend en charge le désassemblage LoongArch, RISC-V, S390Xvetajoute l'analyseurtests(détection des erreurs de signature de fonction de test)
Compatibilité de plateforme
- macOS : Go 1.24 est la dernière version à prendre en charge macOS 11 Big Sur, Go 1.25 nécessitera macOS 12+
- Windows : L'architecture ARM 32 bits est marquée comme incomplète (GOOS=windows GOARCH=arm), voir issue #70705
- Linux : L'exigence de version minimale du noyau est mise à niveau vers 3.2
- Nécessite Go 1.22.6+ comme chaîne d'outils de bootstrap
Dépréciation
math/rand.Seed()est complètement inefficace, nécessiteGODEBUG=randseednop=0pour restaurer l'ancien comportement.runtime.GOROOT()est marqué comme déprécié, il est recommandé d'utilisergo env GOROOTpour obtenir le chemin
1.23
Première publication : 2024-08-13
Dernière mise à jour : go1.23.4 (2024-12-03)
Le journal des mises à jour détaillé de la version go1.23 peut être consulté sur Go 1.23 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.23 - Release Patch.
Niveau du langage
for range prend en charge les fonctions itératives, pour plus de détails voir Go Wiki: Rangefunc Experiment.
gofunc Upper(s []string) iter.Seq2[int, string] { return func(yield func(int, string) bool) { for i, s1 := range s { if !yield(i, strings.ToUpper(s1)) { return } } return } } func main() { sl := []string{"hello", "world", "golang"} for i, s := range Upper(sl) { fmt.Printf("%d : %s\n", i, s) } } //0 : HELLO //1 : WORLD //2 : GOLANGC'est une fonctionnalité assez pratique, généralement utilisée avec les génériques.
Bibliothèque standard
Ajout de la bibliothèque standard
iter, qui définit et décrit les détails sur les itérateursLa bibliothèque
mapsajoute plusieurs fonctions itérativesLa bibliothèque
slicesajoute plusieurs fonctions itérativesAjout de la bibliothèque
structs, qui fournit la capacité de modifier les propriétés des structures, comme la disposition mémoiregotype Person struct { Name string Age int _ structs.HostLayout }Optimisation de l'implémentation de la bibliothèque standard
time
Linker
Traitement de l'abus de
//go:linkname, pour certaines API fréquemment référencées, leur existence est temporairement autorisée, commeruntime.memhash64,runtime.nanotime, etc., désormais les nouvelles références ne seront pas autorisées.go//go:linkname gcinit runtime.gcinit func gcinit() func main() { gcinit() }Un code comme celui-ci ne peut pas être compilé
link: main: invalid reference to runtime.gcinit
Chaîne d'outils
- Ajout de la commande
go telemetrypour la gestion des données de télémétrie
1.22
Première publication : 2024-02-06
Dernière mise à jour : go1.22.6 (publié le 2024-08-06)
Le journal des mises à jour détaillé de la version go1.22 peut être consulté sur Go 1.22 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.22 - Release Patch.
Niveau du langage
Résolution du problème des variables de boucle en go
gofunc main() { var wg sync.WaitGroup const n = 10 wg.Add(n) for i := 0; i < n; i++ { go func() { fmt.Println(i) wg.Done() }() } wg.Wait() }Ce code, avant 1.22, affichait 10 fois 9, après 1.22 il affichera correctement de 0 à 9.
for rangeprend désormais en charge l'itération sur les types numériques, comme suitgofor i := range 10 { fmt.Println(i) }
Bibliothèque standard
Amélioration du routage de la bibliothèque standard
net/httpdatabase/sqlajoute le type génériquesql.Nullgotype Null[T any] struct { V T Valid bool }Utilisation comme suit
gotype Person struct { Name sql.Null[string] Age sql.Null[int] }
1.21
Première publication : 2023-08-08
Dernière mise à jour : go1.21.13 (publié le 2024-08-06)
Le journal des mises à jour détaillé de la version go1.21 peut être consulté sur Go 1.21 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.21 - Release Patch.
Niveau du langage
Ajout de deux fonctions intégrées
min,max, utilisées pour calculer les valeurs maximales et minimales.Ajout de la fonction intégrée
clear, utilisée pour vider les maps et les slicesMise à jour de l'ordre d'initialisation des
package- Tri de tous les packages par chemin d'importation
- Répéter jusqu'à ce que la liste des packages soit vide
- Trouver le premier package de la liste dont toutes les importations ont été initialisées
- Initialiser ce package et le supprimer de la liste
Amélioration et raffinement de la capacité et de la précision de l'inférence de type, principalement liée aux génériques.
Lancement de la version d'aperçu de l'amélioration des variables de boucle
for range, c'est un problème qui a troublé les développeurs Go pendant près de dix ans, l'équipe officielle va enfin le résoudre, pour plus de détails voir : LoopvarExperiment · golang/go Wiki (github.com) et Proposal: Less Error-Prone Loop Variable Scoping (googlesource.com)Garantie que la valeur de retour de
recoverne sera pasnil, si le paramètre lors de l'appel depanicestnil, alors une autrepanicsera déclenchée, retournant*runtime.PanicNilError. Pour la compatibilité, définirGODEBUG=panicnil=1lors de la compilation permet de passernilàpanic.
Bibliothèque standard
- Ajout de la bibliothèque
log/slog, fournissant une bibliothèque de journaux structurés standard - Ajout de la bibliothèque
testing/slogtest, utilisée pour valider l'implémentation deslog.Handler - Ajout de la bibliothèque
slices, fournissant une série de fonctions génériques pour manipuler les slices. - Ajout de la bibliothèque
maps, fournissant une série de fonctions génériques pour manipuler les maps - Ajout de la bibliothèque
cmp, utilisée pour comparer les types ordonnés.
Autres
- go1.21.0 nécessite au moins Windows 10 ou Windows Server 2016 ou version ultérieure pour s'exécuter sur le système Windows, les versions antérieures ne sont plus prises en charge.
- go1.21.0 nécessite au moins macOS 10.15 Catalina ou version ultérieure pour s'exécuter, les versions antérieures ne sont plus prises en charge.
- Ajout de l'interface système WebAssembly expérimental, Go continue d'explorer dans le domaine WASM.
- PGO (Profile-guided optimization) qui était expérimental en 1.20 (voir Profile-guided optimization - The Go Programming Language), est officiellement activé dans la version 1.21. La présence du fichier
default.pgodans le package main activera cette fonctionnalité, après activation les performances peuvent s'améliorer de 2% à 7%. - Lors de l'impression d'une pile d'appels d'exécution très profonde, au lieu d'imprimer seulement les cent premières frames, maintenant imprime respectivement les 50 premières et les 50 dernières frames.
- Optimisation des performances d'appel CGO sur la plateforme Unix, de 1-3 microsecondes optimisé à 100-200 nanosecondes maintenant.
- Dans la version 1.21, la vitesse de compilation s'est améliorée de près de 6%, principalement grâce au compilateur lui-même utilisant PGO pour la construction.
1.20
Première publication : 2023-02-01
Dernière mise à jour : go1.20.14 (publié le 2024-02-06)
Le journal des mises à jour détaillé de la version go1.20 peut être consulté sur Go 1.20 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.20 - Release Patch.
Niveau du langage
- Lors de la conversion d'un type slice en tableau, il fallait auparavant déréférencer le pointeur de tableau
*(*[4byte])(x)pour éviter de partager le même tableau sous-jacent que la slice, maintenant on peut directement écrire[4]byte(x). unsafeajoute les fonctionsSliceData,String,StringData, utilisées pour construire et structurer des slices et des valeurs de chaîne.
Bibliothèque standard
- Ajout de la bibliothèque
crypto/ecdh, fournissant un support pour ECDH (Elliptic Curve Diffie-Hellman, une méthode de chiffrement asymétrique). - go1.20 étend le support pour l'emballage d'erreur, permettant à une erreur d'emballer plusieurs erreurs.
- Ajout de
net/http.ResponseController, fournissant une méthode plus claire et plus facile à découvrir pour ajouter des contrôles par handler. httputil.ReverseProxyinclut une nouvelle fonction Rewrite Hook, utilisée pour remplacer l'ancien hook Director.
Autres
- go1.20 est la dernière version à prendre en charge win7, 8, Server2008 et Server2012, le support ne sera plus fourni dans les versions futures.
- go1.20 est la dernière version à prendre en charge macOS 10.13 ou 10.14, le support ne sera plus fourni dans les versions futures.
- Dans les versions 1.18 et 1.19, en raison de l'apparition des génériques, la vitesse de compilation a régressé par rapport à 1.17, la vitesse de compilation de go1.20 s'améliorera d'environ 10%.
- Publication de la version d'aperçu de PGO (Profile-guided optimization), c'est une technique d'optimisation de compilateur dans le monde informatique, pouvant améliorer les performances d'exécution.
- Dans go1.20, sur les systèmes sans chaînes d'outils C, la commande go désactive cgo.
- Prise en charge de la collecte de fichiers de couverture de code de programme, voir Coverage profiling support for integration tests - The Go Programming Language
- Améliorations du GC, amélioration de la stabilité, réduction de la consommation de mémoire, amélioration des performances CPU globales de 2%.
1.19
Première publication : 2022-08-02
Dernière mise à jour : go1.19.13 (publié le 2023-09-06)
Le journal des mises à jour détaillé de la version go1.19 peut être consulté sur Go 1.19 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.19 - Release Patch.
Changements importants
Le modèle mémoire s'aligne sur c/c++, similaire à TcMollcate
Le package
sync/atomicfournit maintenant plus de types utilisablesPrise en charge de l'utilisation de la fonction
runtime/debug.SetMemoryLimitpour limiter doucement la mémoire go, pouvant améliorer l'efficacité d'utilisation de la mémoire dans certains casL'exécution choisit maintenant une taille appropriée pour initialiser la mémoire de l'espace de pile de goroutine en fonction de l'utilisation moyenne de la pile de goroutine, évitant ainsi les expansions et réductions fréquentes de pile
1.18
Première publication : 2022-03-15
Dernière mise à jour : go1.18.10 (publié le 2023-01-10)
Le journal des mises à jour détaillé de la version go1.18 peut être consulté sur Go 1.18 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.18 - Release Patch.
Niveau du langage
- Mise à jour majeure, prise en charge des génériques, interfaces de type, contraintes de type de paramètre
Autres
- Optimisation du comportement d'expansion de la fonction
append - Ajout du package
debug/buildinfo, permettant d'obtenir les informations de build d'un programme go à l'exécution - gofmt peut maintenant formater les fichiers source de manière concurrente
1.17
Première publication : 2021-08-16
Dernière mise à jour : go1.17.13 (publié le 2022-08-01)
Le journal des mises à jour détaillé de la version go1.17 peut être consulté sur Go 1.17 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.17 - Release Patch.
Niveau du langage
- Ajout de la fonction
unsafe.Add, prise en charge des opérations de pointeur - Ajout de la fonction
unsafe.Slice, prise en charge de l'obtention du pointeur du tableau sous-jacent d'une slice - Les slices peuvent maintenant être converties en types de pointeur de tableau,
[]T => *[N]T, à condition que la longueur du tableau soit inférieure ou égale à la longueur de la slice
1.16
Première publication : 2021-02-16
Dernière mise à jour : go1.16.15 (publié le 2022-03-03)
Le journal des mises à jour détaillé de la version go1.16 peut être consulté sur Go 1.16 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.16 - Release Patch.
Changements importants
Cette version n'a pas de changements syntaxaux importants, voici quelques changements importants
- Dépréciation du package
ioutil - Prise en charge de l'intégration de fichiers statiques dans le programme via la directive
//go:embed - Ajout du type
io/fs.Fs, offrant une meilleure abstraction du système de fichiers
1.15
Première publication : 2020-08-11
Dernière mise à jour : go1.15.15 (publié le 2021-08-05)
Le journal des mises à jour détaillé de la version go1.15 peut être consulté sur Go 1.15 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.15 - Release Patch.
Changements importants
Cette version n'a pas de changements syntaxaux importants, voici quelques changements importants
Optimisation de l'efficacité d'allocation de petits objets
Ajout du package
time/tzdata, prenant en charge l'intégration de la base de données de fuseau horaire dans le programme de la manière suivante, car de nombreux systèmes n'ont pas localement d'informations de données de fuseau horaire.goimport _ "time/tzdata"Améliorations majeures du linker go, réduisant son utilisation de ressources et améliorant la robustesse du code
Dans certains cas, permet la conversion de
unsafe.Pointerenuintptr
1.14
Première publication : 2020-02-25
Dernière mise à jour : go1.14.15 (publié le 2021-02-04)
Le journal des mises à jour détaillé de la version go1.14 peut être consulté sur Go 1.14 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.14 - Release Patch.
Niveau du langage
Prise en charge de l'imbrication des types d'interface de méthode
gotype MyIO interface { io.WriteCloser }
Autres
- Introduction de l'optimisation de codage ouvert, le coût des appels
deferest réduit à presque celui d'un appel natif - Prise en charge de la préemption asynchrone entre goroutines, les boucles sans appels de fonction ne bloqueront plus indéfiniment la planification
1.13
Première publication : 2019-09-03
Dernière mise à jour : go1.13.15 (publié le 2020-08-06)
Le journal des mises à jour détaillé de la version go1.13 peut être consulté sur Go 1.13 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.13 - Release Patch.
Niveau du langage
Prise en charge de littéraux numériques plus modernes, par exemple
go0b101 // binaire 0o10 // octal 0x1B // hexadécimalPrise en charge du soulignement pour séparer les nombres afin d'améliorer la lisibilité
go10_000Le suffixe imaginaire
ipeut maintenant être n'importe quel nombre binaire, octal, hexadécimal ou flottant
Autres
- La valeur de
GO111MODULEest par défautauto - Ajout de la variable d'environnement
GOPRIVATEpour prendre en charge les sources de dépendances privées - Ajout de la variable d'environnement
GOSUMDB - Le coût d'utilisation de
deferest réduit de 30% - Lors d'un dépassement d'index,
panicaffiche maintenant les informations d'index - go effectue une validation de version sémantique lors du téléchargement de dépendances
1.12
Première publication : 2019-02-25
Dernière mise à jour : go1.12.17 (publié le 2020-02-12)
Le journal des mises à jour détaillé de la version go1.12 peut être consulté sur Go 1.12 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.12 - Release Patch.
Changements importants
Cette version n'a pas de changements syntaxaux importants, voici quelques changements importants
- Amélioration significative des performances de balayage du tas
- L'exécution libère plus activement la mémoire allouée au système d'exploitation
- La commande utilisée pour télécharger les dépendances go peut maintenant être utilisée de manière concurrente en toute sécurité
1.11
Première publication : 2018-08-24
Dernière mise à jour : go1.11.13 (publié le 2019-08-13)
Le journal des mises à jour détaillé de la version go1.11 peut être consulté sur Go 1.11 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.11 - Release Patch.
Changements importants
Cette version n'a pas de changements syntaxaux importants, voici quelques changements importants
- Première publication de GoMod, la situation chaotique de gestion des dépendances va prendre fin
- Premier support expérimental de WASM
- L'exécution utilise une disposition de tas clairsemée, ne limitant plus la taille du tas
1.10
Première publication : 2018-02-16
Dernière mise à jour : go1.10.8 (publié le 2019-01-23)
Le journal des mises à jour détaillé de la version go1.10 peut être consulté sur Go 1.10 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.10 - Release Patch.
Changements importants
Cette version n'a pas de changements syntaxaux importants, voici quelques changements importants
- La commande
go installest maintenant utilisée uniquement pour installer et compiler des outils en ligne de commande, plus pour télécharger des dépendances - La commande
go getest maintenant utilisée pour télécharger les dépendances source - Les tests go mettent maintenant en cache les résultats de test et exécutent automatiquement
go vetavant l'exécution - Réduction significative des délais causés par le GC lorsqu'il est actif
1.9
Première publication : 2017-08-24
Dernière mise à jour : go1.9.7 (publié le 2018-06-05)
Le journal des mises à jour détaillé de la version go1.9 peut être consulté sur Go 1.9 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.9 - Release Patch.
Niveau du langage
- Prise en charge des alias de type
Autres
- Prise en charge de la compilation parallèle
- Ajout de
sync.Mapthread-safe
1.8
Première publication : 2017-02-16
Dernière mise à jour : go1.8.7 (publié le 2018-02-07)
Le journal des mises à jour détaillé de la version go1.8 peut être consulté sur Go 1.8 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.8 - Release Patch.
Niveau du langage
Lors de la conversion de type entre deux structures, les différences de tags de structure sont ignorées
gofunc example() { type T1 struct { X int `json:"foo"` } type T2 struct { X int `json:"bar"` } var v1 T1 var v2 T2 v1 = T1(v2) // maintenant légal }
Autres
- Le temps de pause causé par la collecte des ordures est aussi bas que 10 microsecondes, dans la plupart des cas inférieur à 100 microsecondes (on peut voir que presque chaque version de go s'efforce d'améliorer le GC)
- Le coût d'appel de
deferest réduit de près de moitié - Le coût d'appel de go vers c est réduit de près de moitié
- Optimisation de la détection d'utilisation concurrente des maps
1.7
Première publication : 2016-08-15
Dernière mise à jour : go1.7.6 (publié le 2017-05-23)
Le journal des mises à jour détaillé de la version go1.7 peut être consulté sur Go 1.7 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.7 - Release Patch.
Changements importants
- Ajout de
golang.org/x/net/contextà la bibliothèque standard - Le temps de gc est considérablement réduit par rapport à 1.6
- Le package
testingprend en charge les sous-tests
1.6
Première publication : 2016-02-17
Dernière mise à jour : go1.6.4 (publié le 2016-12-01)
Le journal des mises à jour détaillé de la version go1.6 peut être consulté sur Go 1.6 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.6 - Release Patch.
Changements importants
Cette version n'a pas de changements syntaxaux, voici les changements les plus importants
- Détection d'utilisation concurrente des maps, si une map est détectée comme étant utilisée de manière concurrente, un
fatalest lancé - Lors d'un
panic, seule la pile d'appels de la goroutine en cours d'exécution est imprimée - Prise en charge de HTTP/2
1.5
Première publication : 2015-08-19
Dernière mise à jour : go1.5.4 (publié le 2016-04-12)
Le journal des mises à jour détaillé de la version go1.5 peut être consulté sur Go 1.5 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.5 - Release Patch.
Niveau du langage
Lors de l'initialisation des clés d'un littéral de map, permet d'omettre le type d'élément
gom := map[Point]string{ Point{29.935523, 52.891566}: "Persepolis", Point{-25.352594, 131.034361}: "Uluru", Point{37.422455, -122.084306}: "Googleplex", } // omettre le type m := map[Point]string{ {29.935523, 52.891566}: "Persepolis", {-25.352594, 131.034361}: "Uluru", {37.422455, -122.084306}: "Googleplex", }
Autres
- L'exécution et le compilateur sont entièrement réécrits en go, ne contiennent plus aucun code c
- Prise en charge de la collecte des ordures concurrente, réduisant considérablement le temps de pause du programme
- La valeur par défaut de
GOMAXPROCSdevient le nombre de cœurs logiques de la machine - La sémantique des packages
internalpeut être appliquée n'importe où, plus limitée aux packages source de go - Support expérimental de la gestion des dépendances vendor (enfin commencer à s'attaquer à cette partie de la gestion des dépendances)
1.4
Première publication : 2014-12-10
Dernière mise à jour : go1.4.3 (publié le 2015-09-22)
Le journal des mises à jour détaillé de la version go1.4 peut être consulté sur Go 1.4 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.4 - Release Patch.
Niveau du langage
La boucle
for rangepeut avoir un paramètre d'itération, par exemplefor i := range x { ... }Mais ne peut pas en avoir zéro
Lors de l'appel d'une méthode sur un type de référence double, la déréférenciation automatique n'est plus effectuée
gotype T int func (T) M() {} var x **T // non autorisé x.M()
Autres
- Avant 1.4, l'exécution de go était écrite en c, maintenant tout est fait en go
- Prise en charge de la modification du nom de package en
internalpour indiquer que tout le contenu de ce package est privé et non exportable
1.3
Première publication : 2014-06-18
Dernière mise à jour : go1.3.3 (publié le 2014-09-30)
Le journal des mises à jour détaillé de la version go1.3 peut être consulté sur Go 1.3 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.3 - Release Patch.
Changements importants
Cette version n'a pas de changements syntaxaux, voici quelques changements importants
- Le modèle de pile de goroutine passe de pile segmentée à pile continue, améliorant les performances d'expansion de pile.
- Amélioration de la précision de jugement des pointeurs du ramasse-miettes
- Lors de l'itération sur des maps de petite capacité, l'ordre devient également imprévisible
- Grâce à certaines améliorations de l'exécution, les performances des programmes go de la version actuelle ont été considérablement améliorées
1.2
Première publication : 2013-12-01
Dernière mise à jour : go1.2.2 (publié le 2014-05-05)
Le journal des mises à jour détaillé de la version go1.2 peut être consulté sur Go 1.2 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.2 - Release Patch.
Niveau du langage
L'opération sur des variables de valeur
nildéclenchera unpanicLors de la découpe d'une slice, un troisième paramètre peut être utilisé pour limiter la capacité de la slice découpée afin d'utiliser la slice de manière plus sûre
govar array [10]int slice := array[2:4:4]
Autres
La taille minimale de mémoire de pile de goroutine passe de 4KB à 8KB
Le nombre maximum de threads est limité à 10000
Les goroutines s'exécutant pendant une longue période seront préemptées lors d'un appel de fonction (première introduction de la préemption coopérative)
1.1
Première publication : 2013-05-13
Dernière mise à jour : go1.1.2 (publié le 2013-08-13)
Le journal des mises à jour détaillé de la version go1.1 peut être consulté sur Go 1.1 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.1 - Release Patch.
Niveau du langage
- La division d'un nombre par 0 déclenchait auparavant un
panic, en 1.1 cela ne passe plus la compilation. - Les méthodes peuvent exister en tant que valeurs.
- Introduction du concept de déclaration de fin, les règles de retour de fonction sont plus souples, définition de déclaration de fin - go-sepc.
Performances
- Les programmes go compilés avec les outils go1.1 peuvent améliorer les performances d'environ 30%-40%
Autres :
- La valeur maximale de mémoire de tas sur les machines 64 bits est augmentée à plusieurs dizaines de Go
- cgo est désactivé par défaut lors de la compilation croisée
1.0
Première publication : 2012-03-28
Le journal des mises à jour détaillé de la version go1.0 peut être consulté sur Go 1.0 Release Notes, et toutes les versions de correctifs publiées pendant sa période de maintenance peuvent être consultées sur Go1.0 - Release Patch.
Niveau du langage
Par rapport à la version d'aperçu, la syntaxe a ajouté les éléments suivants
Ajout de la fonction intégrée
append, utilisée pour ajouter des éléments à une sliceAjout de la fonction intégrée
close, utilisée pour fermer les canauxSémantique composite, lors de l'initialisation des éléments de slices, maps, littéraux de structure, leur type peut être omis, comme suit
go// déclarer le type holiday1 := []Date{ Date{"Feb", 14}, Date{"Nov", 11}, Date{"Dec", 25}, } // omettre le type holiday2 := []Date{ {"Feb", 14}, {"Nov", 11}, {"Dec", 25}, }Les goroutines utilisées dans les fonctions
initseront démarrées directement, plus besoin d'attendre que tous les packages soient initialisés.Ajout du type
rune, représentant un caractère UTF-8Ajout de l'interface intégrée
error, représentant le type d'erreurAjout de la fonction intégrée
deleteutilisée pour supprimer des paires clé-valeur des mapsL'ordre d'itération sur les maps avec
for rangedevient imprévisiblePrise en charge de l'affectation de plusieurs variables simultanément
a := 1 b := 2 a, b = 3, 4Problème de masquage de variables : lorsqu'une fonction a des valeurs de retour nommées, si des valeurs de retour sont masquées, alors la déclaration
returndoit inclure les valeurs de retour, sinon la compilation échouera, voici un exemple d'erreurgofunc Bug() (i, j, k int) { for i = 0; i < 5; i++ { for j := 0; j < 5; j++ { // Redéclare j. k += i * j if k > 100 { return // Rejeté : j est masqué ici. } } } return // OK : j n'est pas masqué ici. }Permet la copie de valeurs de structure avec des champs privés
Lorsque les structures et les slices sont composées d'éléments comparables, elles sont autorisées comme clés de map, tout en supprimant la comparabilité des fonctions et des maps
En plus du niveau du langage, go1.0 a apporté des changements très importants par rapport à la version d'aperçu en termes d'organisation des packages, de bibliothèque standard et de ligne de commande, en raison du contenu trop important, cela ne sera pas détaillé ici, les intéressés peuvent se rendre sur le site officiel pour en savoir plus.
pre
Avant la publication officielle de go1, toutes les versions étaient appelées versions d'aperçu, pour ces versions d'aperçu l'équipe officielle publiait une version instantanée chaque semaine, parmi lesquelles les versions les plus importantes sont
- r60(2011-09-07), stipule que les blocs else doivent maintenant avoir des parenthèses
- r59(2011-08-01), conçoit un nouveau schéma de tags de structure
- r58(2011-06-29), corrige le problème de mémoire non initialisée causé par l'abus de goto, ajoute les packages gui, exec
- r57(2011-05-03), prend en charge la syntaxe d'affectation multiple de variables courtes, reconçoit les packages http, reflect, transforme gotest en un programme go plutôt qu'un script shell
- r56(2011-03-07), première version stable
Le développement des versions d'aperçu a commencé le 09 décembre 2009 et s'est arrêté après la publication officielle de go1 le 28 mars 2012, durant près de trois ans, les versions instantanées hebdomadaires ne sont plus enregistrées par la suite. Consulter Pre-Go 1 Release History pour obtenir des informations sur ces versions principales, et consulter Weekly Snapshot History pour obtenir des informations sur toutes les versions instantanées hebdomadaires des versions d'aperçu.
