Skip to content

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

  1. Suppression du concept de type de base (core type) dans les génériques, voir l'article officiel Goodbye core types

Bibliothèque standard

  1. Ajout de test/synctest, utilisé pour tester le code concurrent
  2. 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/jsonbench
    • encoding/json/jsontext, fournit la capacité d'interagir à bas niveau avec les chaînes JSON

Chaîne d'outils

  1. Les futures versions de Go incluront un petit nombre d'outils binaires pré-construits
  2. go mod ajoute la directive ignore, utilisée pour spécifier les dossiers que la commande go doit ignorer
  3. go doc -http peut démarrer un serveur HTTP local pour consulter la documentation du code
  4. go vet, ajout des analyseurs waitgroup et hostport
  5. Lorsque la ligne de commande go met à jour la version go dans go.mod ou go.work, elle n'ajoute plus la version de la chaîne d'outils go spécifiée

Exécution

  1. GOMAXPROCS détectera la limite CPU du conteneur dans un environnement conteneurisé

  2. Nouvelle GC expérimentale greenteagc, l'unité de planification de base de la GC passe de object à memory span

  3. Lorsqu'une panic n'est pas capturée, elle n'est plus imprimée en double

    panic: PANIC [recovered]
      panic: PANIC

    devient

    panic: PANIC [recovered, repanicked]
  4. Ajout de runtime/trace.FlightRecorder, capable de capturer de manière plus légère les informations d'exécution en continu

Compilateur

  1. 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

    go
    package 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)
    }
  2. 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

  3. 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

  1. 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

    go
    import (
        "other"
    )
    
    type MyQuque[T any] = other.Queue[T]

Bibliothèque standard

  1. 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 est nil avant utilisation
  2. 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é
  3. Prise en charge du chiffrement et du hachage : ajout des packages crypto/mlkem, crypto/hkdf, crypto/pbkdf2 et crypto/sha3, optimisation des performances des algorithmes de chiffrement existants
  4. Ajout de la fonction de benchmark testing.B.Loop pour de meilleurs tests de boucle
  5. encoding/json : ajout du tag omitzero, prise en charge du filtrage des valeurs nulles basé sur la méthode IsZero()
  6. strings et bytes : ajout de fonctions itératives (comme Lines, SplitSeq, FieldsSeq)

Exécution

  1. 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%
  2. sync.Map utilise désormais un Trie de hachage concurrent (hash-trie) pour optimiser les performances, en particulier dans les cas d'écriture concurrente
  3. 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
  4. 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
  5. Ajout de runtime.AddCleanup pour remplacer runtime.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

  1. Prise en charge des annotations #cgo noescape et #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
  2. 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) et void f(double)), évitant la génération de séquences d'appel erronées

Chaîne d'outils

  1. 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
  2. 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
  3. 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)
  4. Interdiction de contourner les restrictions de définition de méthode pour les types générés par CGO via des alias
  5. go build intè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)
  6. La variable d'environnement GOAUTH prend en charge l'authentification des modules privés.
  7. go.mod prend en charge la directive tool pour gérer les dépendances exécutables, remplaçant les imports vides de tools.go
  8. Ajout du paramètre go get -tool et de la commande go install tool pour gérer les dépendances d'outils de module
  9. Le cache de build prend en charge le cache binaire pour go run et go tool
  10. objdump prend en charge le désassemblage LoongArch, RISC-V, S390X
  11. vet ajoute l'analyseur tests (détection des erreurs de signature de fonction de test)

Compatibilité de plateforme

  1. macOS : Go 1.24 est la dernière version à prendre en charge macOS 11 Big Sur, Go 1.25 nécessitera macOS 12+
  2. Windows : L'architecture ARM 32 bits est marquée comme incomplète (GOOS=windows GOARCH=arm), voir issue #70705
  3. Linux : L'exigence de version minimale du noyau est mise à niveau vers 3.2
  4. Nécessite Go 1.22.6+ comme chaîne d'outils de bootstrap

Dépréciation

  1. math/rand.Seed() est complètement inefficace, nécessite GODEBUG=randseednop=0 pour restaurer l'ancien comportement.
  2. runtime.GOROOT() est marqué comme déprécié, il est recommandé d'utiliser go env GOROOT pour 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

  1. for range prend en charge les fonctions itératives, pour plus de détails voir Go Wiki: Rangefunc Experiment.

    go
    func 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 : GOLANG

    C'est une fonctionnalité assez pratique, généralement utilisée avec les génériques.

Bibliothèque standard

  1. Ajout de la bibliothèque standard iter, qui définit et décrit les détails sur les itérateurs

  2. La bibliothèque maps ajoute plusieurs fonctions itératives

  3. La bibliothèque slices ajoute plusieurs fonctions itératives

  4. Ajout de la bibliothèque structs, qui fournit la capacité de modifier les propriétés des structures, comme la disposition mémoire

    go
    type Person struct {
      Name string
      Age  int
      _    structs.HostLayout
    }
  5. Optimisation de l'implémentation de la bibliothèque standard time

Linker

  1. Traitement de l'abus de //go:linkname, pour certaines API fréquemment référencées, leur existence est temporairement autorisée, comme runtime.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

  1. Ajout de la commande go telemetry pour 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

  1. Résolution du problème des variables de boucle en go

    go
    func 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.

  2. for range prend désormais en charge l'itération sur les types numériques, comme suit

    go
    for i := range 10 {
      fmt.Println(i)
    }

Bibliothèque standard

  1. Amélioration du routage de la bibliothèque standard net/http

  2. database/sql ajoute le type générique sql.Null

    go
    type Null[T any] struct {
      V     T
      Valid bool
    }

    Utilisation comme suit

    go
    type 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

  1. Ajout de deux fonctions intégrées min, max, utilisées pour calculer les valeurs maximales et minimales.

  2. Ajout de la fonction intégrée clear, utilisée pour vider les maps et les slices

  3. Mise à 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
  4. 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.

  5. 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)

  6. Garantie que la valeur de retour de recover ne sera pas nil, si le paramètre lors de l'appel de panic est nil, alors une autre panic sera déclenchée, retournant *runtime.PanicNilError. Pour la compatibilité, définir GODEBUG=panicnil=1 lors de la compilation permet de passer nil à panic.

Bibliothèque standard

  1. Ajout de la bibliothèque log/slog, fournissant une bibliothèque de journaux structurés standard
  2. Ajout de la bibliothèque testing/slogtest, utilisée pour valider l'implémentation de slog.Handler
  3. Ajout de la bibliothèque slices, fournissant une série de fonctions génériques pour manipuler les slices.
  4. Ajout de la bibliothèque maps, fournissant une série de fonctions génériques pour manipuler les maps
  5. Ajout de la bibliothèque cmp, utilisée pour comparer les types ordonnés.

Autres

  1. 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.
  2. 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.
  3. Ajout de l'interface système WebAssembly expérimental, Go continue d'explorer dans le domaine WASM.
  4. 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.pgo dans le package main activera cette fonctionnalité, après activation les performances peuvent s'améliorer de 2% à 7%.
  5. 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.
  6. Optimisation des performances d'appel CGO sur la plateforme Unix, de 1-3 microsecondes optimisé à 100-200 nanosecondes maintenant.
  7. 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

  1. 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).
  2. unsafe ajoute les fonctions SliceData, String, StringData, utilisées pour construire et structurer des slices et des valeurs de chaîne.

Bibliothèque standard

  1. Ajout de la bibliothèque crypto/ecdh, fournissant un support pour ECDH (Elliptic Curve Diffie-Hellman, une méthode de chiffrement asymétrique).
  2. go1.20 étend le support pour l'emballage d'erreur, permettant à une erreur d'emballer plusieurs erreurs.
  3. Ajout de net/http.ResponseController, fournissant une méthode plus claire et plus facile à découvrir pour ajouter des contrôles par handler.
  4. httputil.ReverseProxy inclut une nouvelle fonction Rewrite Hook, utilisée pour remplacer l'ancien hook Director.

Autres

  1. 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.
  2. 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.
  3. 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%.
  4. 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.
  5. Dans go1.20, sur les systèmes sans chaînes d'outils C, la commande go désactive cgo.
  6. 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
  7. 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

  1. Le modèle mémoire s'aligne sur c/c++, similaire à TcMollcate

  2. Le package sync/atomic fournit maintenant plus de types utilisables

  3. Prise en charge de l'utilisation de la fonction runtime/debug.SetMemoryLimit pour limiter doucement la mémoire go, pouvant améliorer l'efficacité d'utilisation de la mémoire dans certains cas

  4. L'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

  1. Mise à jour majeure, prise en charge des génériques, interfaces de type, contraintes de type de paramètre

Autres

  1. Optimisation du comportement d'expansion de la fonction append
  2. Ajout du package debug/buildinfo, permettant d'obtenir les informations de build d'un programme go à l'exécution
  3. 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

  1. Ajout de la fonction unsafe.Add, prise en charge des opérations de pointeur
  2. Ajout de la fonction unsafe.Slice, prise en charge de l'obtention du pointeur du tableau sous-jacent d'une slice
  3. 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

  1. Dépréciation du package ioutil
  2. Prise en charge de l'intégration de fichiers statiques dans le programme via la directive //go:embed
  3. 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

  1. Optimisation de l'efficacité d'allocation de petits objets

  2. 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.

    go
    import _ "time/tzdata"
  3. Améliorations majeures du linker go, réduisant son utilisation de ressources et améliorant la robustesse du code

  4. Dans certains cas, permet la conversion de unsafe.Pointer en uintptr

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

  1. Prise en charge de l'imbrication des types d'interface de méthode

    go
    type MyIO interface {
      io.WriteCloser
    }

Autres

  1. Introduction de l'optimisation de codage ouvert, le coût des appels defer est réduit à presque celui d'un appel natif
  2. 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

  1. Prise en charge de littéraux numériques plus modernes, par exemple

    go
    0b101 // binaire
    0o10 // octal
    0x1B // hexadécimal

    Prise en charge du soulignement pour séparer les nombres afin d'améliorer la lisibilité

    go
    10_000

    Le suffixe imaginaire i peut maintenant être n'importe quel nombre binaire, octal, hexadécimal ou flottant

Autres

  1. La valeur de GO111MODULE est par défaut auto
  2. Ajout de la variable d'environnement GOPRIVATE pour prendre en charge les sources de dépendances privées
  3. Ajout de la variable d'environnement GOSUMDB
  4. Le coût d'utilisation de defer est réduit de 30%
  5. Lors d'un dépassement d'index, panic affiche maintenant les informations d'index
  6. 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

  1. Amélioration significative des performances de balayage du tas
  2. L'exécution libère plus activement la mémoire allouée au système d'exploitation
  3. 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

  1. Première publication de GoMod, la situation chaotique de gestion des dépendances va prendre fin
  2. Premier support expérimental de WASM
  3. 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

  1. La commande go install est maintenant utilisée uniquement pour installer et compiler des outils en ligne de commande, plus pour télécharger des dépendances
  2. La commande go get est maintenant utilisée pour télécharger les dépendances source
  3. Les tests go mettent maintenant en cache les résultats de test et exécutent automatiquement go vet avant l'exécution
  4. 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

  1. Prise en charge des alias de type

Autres

  1. Prise en charge de la compilation parallèle
  2. Ajout de sync.Map thread-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

  1. Lors de la conversion de type entre deux structures, les différences de tags de structure sont ignorées

    go
    func 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

  1. 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)
  2. Le coût d'appel de defer est réduit de près de moitié
  3. Le coût d'appel de go vers c est réduit de près de moitié
  4. 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

  1. Ajout de golang.org/x/net/context à la bibliothèque standard
  2. Le temps de gc est considérablement réduit par rapport à 1.6
  3. Le package testing prend 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

  1. Détection d'utilisation concurrente des maps, si une map est détectée comme étant utilisée de manière concurrente, un fatal est lancé
  2. Lors d'un panic, seule la pile d'appels de la goroutine en cours d'exécution est imprimée
  3. 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

  1. Lors de l'initialisation des clés d'un littéral de map, permet d'omettre le type d'élément

    go
    m := 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

  1. L'exécution et le compilateur sont entièrement réécrits en go, ne contiennent plus aucun code c
  2. Prise en charge de la collecte des ordures concurrente, réduisant considérablement le temps de pause du programme
  3. La valeur par défaut de GOMAXPROCS devient le nombre de cœurs logiques de la machine
  4. La sémantique des packages internal peut être appliquée n'importe où, plus limitée aux packages source de go
  5. 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

  1. La boucle for range peut avoir un paramètre d'itération, par exemple

    for i := range x {
        ...
    }

    Mais ne peut pas en avoir zéro

  2. 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

    go
    type T int
    func (T) M() {}
    var x **T
    
    // non autorisé
    x.M()

Autres

  1. Avant 1.4, l'exécution de go était écrite en c, maintenant tout est fait en go
  2. Prise en charge de la modification du nom de package en internal pour 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

  1. Le modèle de pile de goroutine passe de pile segmentée à pile continue, améliorant les performances d'expansion de pile.
  2. Amélioration de la précision de jugement des pointeurs du ramasse-miettes
  3. Lors de l'itération sur des maps de petite capacité, l'ordre devient également imprévisible
  4. 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

  1. L'opération sur des variables de valeur nil déclenchera un panic

  2. Lors 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

    go
    var array [10]int
    slice := array[2:4:4]

Autres

  1. La taille minimale de mémoire de pile de goroutine passe de 4KB à 8KB

  2. Le nombre maximum de threads est limité à 10000

  3. 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

  1. La division d'un nombre par 0 déclenchait auparavant un panic, en 1.1 cela ne passe plus la compilation.
  2. Les méthodes peuvent exister en tant que valeurs.
  3. 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

  1. Les programmes go compilés avec les outils go1.1 peuvent améliorer les performances d'environ 30%-40%

Autres :

  1. La valeur maximale de mémoire de tas sur les machines 64 bits est augmentée à plusieurs dizaines de Go
  2. 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

  1. Ajout de la fonction intégrée append, utilisée pour ajouter des éléments à une slice

  2. Ajout de la fonction intégrée close, utilisée pour fermer les canaux

  3. Sé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},
    }
  4. Les goroutines utilisées dans les fonctions init seront démarrées directement, plus besoin d'attendre que tous les packages soient initialisés.

  5. Ajout du type rune, représentant un caractère UTF-8

  6. Ajout de l'interface intégrée error, représentant le type d'erreur

  7. Ajout de la fonction intégrée delete utilisée pour supprimer des paires clé-valeur des maps

  8. L'ordre d'itération sur les maps avec for range devient imprévisible

  9. Prise en charge de l'affectation de plusieurs variables simultanément

    a := 1
    b := 2
    a, b = 3, 4
  10. Problè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 return doit inclure les valeurs de retour, sinon la compilation échouera, voici un exemple d'erreur

    go
    func 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.
    }
  11. Permet la copie de valeurs de structure avec des champs privés

  12. 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.

Golang by www.golangdev.cn edit