Skip to content

Go-Update-Log

Wartungsversionen:

  • go1.25, Erstveröffentlichung: 2025-08-12, Letztes Update: go1.25.0 (2025-08-12)
  • go1.24, Erstveröffentlichung: 2025-02-11, Letztes Update: go1.24.6 (2024-08-06)

Offizielles Go-Sprach-Update-Log: Release History - The Go Programming Language

Go verwendet offiziell semantische Versionierung für die Versionskennzeichnung. Das Format ist vHauptversion.Nebenversion.Patch-Version (siehe Semantic Versioning). Ein Update der Hauptversion bedeutet eine Breaking Change, also ein Update, das nicht abwärtskompatibel ist. Ein Update der Nebenversion bedeutet, dass neue Funktionen hinzugefügt wurden, während die Abwärtskompatibilität erhalten bleibt. Ein Update der Patch-Version bedeutet, dass Probleme behoben wurden, während die Abwärtskompatibilität erhalten bleibt.

Das Go-Team veröffentlicht alle sechs Monate eine Nebenversion und nur die neuesten zwei Nebenversionen werden langfristig gewartet. Die Wartungszeit beträgt jeweils sechs Monate. Da Go bei jedem Update eine sehr hohe Kompatibilität beibehält, wird empfohlen, Go nach der Stabilisierung der neuen Version rechtzeitig auf die neueste Version zu aktualisieren.

Go2.0 wurde erstmals im November 2018 als Entwurf vorgeschlagen, damals noch in der Version go1.13. Fünf Jahre später hat sich die Version zu go1.21 weiterentwickelt. Die verschiedenen Ideen für Go2.0 wurden durch inkrementelle Updates in Go1.0 umgesetzt. Einer der Gründer hat auch klar zum Ausdruck gebracht, dass es in Zukunft möglicherweise kein Go2.0 geben wird. Go wird weiterhin daran arbeiten, die Abwärtskompatibilität zu erhalten (siehe Go 1 and the Future of Go Programs).

Hinweis

Diese Seite ist nur ein einfacher Nachdruck des offiziellen Logs und wird unregelmäßig aktualisiert. Für die neuesten Informationen besuchen Sie bitte die offizielle Website.

1.25

Erstveröffentlichung: 2025-08-12

Letztes Update: go1.25.0 (2025-08-12)

Das detaillierte Update-Log der Version go1.25 finden Sie unter Go 1.24 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.25 - Release Patch.

Sprachebene

  1. Das Konzept des Core Type in Generics wurde entfernt, siehe offizieller Blogbeitrag Goodbye core types

Standardbibliothek

  1. Neu hinzugefügt test/synctest zum Testen von nebenläufigem Code
  2. Neue experimentelle Bibliothek encoding/json/v2, enthält:
    • encoding/json/v2, die Deserialisierungsgeschwindigkeit ist etwa 2-10 Mal schneller als v1. Benchmark-Tests siehe go-json-experiment/jsonbench
    • encoding/json/jsontext, bietet die Möglichkeit zur Low-Level-Interaktion mit JSON-Strings

Toolchain

  1. Zukünftige Go-Veröffentlichungen werden eine kleine Anzahl vorkompilierter Binär-Tools enthalten
  2. go mod hat neue ignore-Direktive hinzugefügt, um Ordner anzugeben, die der go-Befehl ignorieren soll
  3. go doc -http kann einen lokalen HTTP-Server starten, um Code-Dokumentation anzuzeigen
  4. go vet hat neue waitgroup- und hostport-Analyzer hinzugefügt
  5. Wenn die go-Kommandozeile die Go-Version in go.mod oder go.work aktualisiert, wird die angegebene go toolchain version nicht mehr hinzugefügt

Laufzeitumgebung

  1. GOMAXPROCS berücksichtigt in Container-Umgebungen die CPU-Limits des Containers

  2. Neue experimentelle GC greenteagc, die grundlegende Scheduling-Einheit der GC hat sich von Objekt zu Memory Span geändert

  3. Wenn ein Panic nicht abgefangen wird, wird er nicht mehr wiederholt ausgegeben

    panic: PANIC [recovered]
      panic: PANIC

    wird zu

    panic: PANIC [recovered, repanicked]
  4. Neu hinzugefügt runtime/trace.FlightRecorder, der Laufzeitausführungsinformationen kontinuierlich und leichtgewichtiger erfassen kann

Compiler

  1. Der Bug der verzögerten Nullzeigerprüfung in 1.21 (verzögert bis nach der Fehlerprüfung) wurde behoben. Der folgende offensichtlich problematische Code konnte in Versionen vor 1.25 normal ausgeführt werden

    go
    package main
    
    import "os"
    
    func main() {
    	f, err := os.Open("nonExistentFile")
    	name := f.Name()
    	if err != nil {
    		println("should panic") // In Versionen vor 1.25 wird diese Zeile ausgegeben
    		return
    	}
    	println(name)
    }
  2. Der Compiler reserviert mehr Backup-Speicher für Slices auf dem Stack, um die Nutzungsleistung zu verbessern

  3. Unterstützt die Generierung von DWARF5-Debug-Informationen

1.24

Erstveröffentlichung: 2025-02-11

Letztes Update: go1.24.6 (2025-08-06)

Das detaillierte Update-Log der Version go1.24 finden Sie unter Go 1.24 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.24 - Release Patch.

Sprachebene

  1. Generische Typ-Aliase, ermöglichen das Erstellen von Aliasen für generische Typen. Dies ist sehr nützlich beim Verweisen auf generische Typen aus Drittanbieter-Definitionen, zum Beispiel

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

Standardbibliothek

  1. Neues weak-Paket: Bietet schwache Zeiger (Weak Pointers), die es ermöglichen, Objekte zu referenzieren, ohne den Referenzzähler zu erhöhen. Vermeidet Speicherlecks durch Caching. Vor der Verwendung muss geprüft werden, ob der Zeiger nil ist
  2. Dateisystem-Zugriffsbeschränkung: Einführung des os.Root-Typs, der Dateioperationen auf ein bestimmtes Verzeichnis beschränkt und die Sicherheit erhöht
  3. Kryptografie- und Hash-Unterstützung: Neue Pakete crypto/mlkem, crypto/hkdf, crypto/pbkdf2 und crypto/sha3, Optimierung der Leistung bestehender Kryptografie-Algorithmen
  4. Neue Benchmark-Funktion testing.B.Loop für bessere Schleifentests
  5. encoding/json: Neues omitzero-Tag, unterstützt Nullwert-Filterung basierend auf der IsZero()-Methode
  6. strings und bytes: Neue Iterator-Funktionen (wie Lines, SplitSeq, FieldsSeq)

Laufzeitumgebung

  1. Neugestaltung der integrierten Map basierend auf Swiss Tables, Zugriffsgeschwindigkeit bei großen Maps um 30% verbessert, Iterationsgeschwindigkeit um 10%-60% verbessert
  2. sync.Map verwendet jetzt Concurrent Hash Trie (hash-trie) zur Leistungsoptimierung, besonders bei nebenläufigem Schreiben
  3. Mutexe in der Laufzeitumgebung verwenden neue Spinbit-Implementierung, reduziert Lock-Konflikte und verbessert die Leistung in Szenarien mit hoher Nebenläufigkeit
  4. Optimierte Zuweisungsstrategie für kleine Objekte, reduziert Speicherfragmentierung und GC-Pausenzeiten
  5. Neu hinzugefügt runtime.AddCleanup als Ersatz für runtime.SetFinalizer, unterstützt die Registrierung mehrerer Bereinigungsfunktionen für Objekte, die sequenziell in einer eigenen Goroutine ausgeführt werden

Cgo

  1. Unterstützung für #cgo noescape und #cgo nocallback Annotationen, die bzw. deklarieren, dass C-Funktionen keinen Speicher escapen lassen und keine Go-Funktionen zurückrufen, was die Laufzeitleistung verbessert
  2. Cgo lehnt jetzt das Kompilieren von Aufrufen an C-Funktionen mit mehreren inkompatiblen Deklarationen ab, strenge Erkennung inkompatibler C-Funktionsdeklarationen über Dateien hinweg (wie void f(int) und void f(double)), um falsche Aufrufsequenzen zu vermeiden

Toolchain

  1. Modul-Tool-Abhängigkeitsmanagement: Verfolgung von Tool-Abhängigkeiten durch die tool-Direktive in go.mod, ersetzt die traditionelle tools.go-Leerimport-Lösung
  2. Strukturierte Ausgabe: go build und go test unterstützen das -json-Flag, geben Build- und Testergebnisse im JSON-Format aus
  3. Kompilierungs- und Link-Optimierung: Compiler generiert effizienteren Code, Linker generiert standardmäßig GNU Build ID (ELF-Plattform) und UUID (macOS)
  4. Verbietet das Umgehen von Beschränkungen für Methodendefinitionen auf CGO-generierten Typen durch Aliase
  5. go build bettet automatisch Versionskontrollsystem-Informationen in Binärdateien ein (unterstützt -buildvcs=false zum Deaktivieren)
  6. GOAUTH-Umgebungsvariable unterstützt Authentifizierung für private Module
  7. go.mod unterstützt tool-Direktive zur Verwaltung von ausführbaren Abhängigkeiten, ersetzt tools.go-Leerimport
  8. Neue Befehle go get -tool und go install tool zur Verwaltung von Modul-Tool-Abhängigkeiten
  9. Build-Cache unterstützt Binär-Cache für go run und go tool
  10. objdump unterstützt LoongArch, RISC-V, S390X Disassemblierung
  11. vet hat neuen tests-Analyzer hinzugefügt (erkennt Fehler in Testfunktions-Signaturen)

Plattformkompatibilität

  1. macOS: Go 1.24 ist die letzte Version, die macOS 11 Big Sur unterstützt. Go 1.25 erfordert macOS 12+
  2. Windows: 32-Bit-ARM-Architektur als unvollständig markiert (GOOS=windows GOARCH=arm), siehe Issue #70705
  3. Linux: Minimale Kernel-Version auf 3.2 erhöht
  4. Erfordert Go 1.22.6+ als Bootstrap-Toolchain

Veraltet

  1. math/rand.Seed() funktioniert nicht mehr, muss durch GODEBUG=randseednop=0 wiederhergestellt werden, um das alte Verhalten zu erhalten
  2. runtime.GOROOT() als veraltet markiert, empfohlen, den Pfad über go env GOROOT zu erhalten

1.23

Erstveröffentlichung: 2024-08-13

Letztes Update: go1.23.4 (2024-12-03)

Das detaillierte Update-Log der Version go1.23 finden Sie unter Go 1.23 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.23 - Release Patch.

Sprachebene

  1. for range unterstützt Iterator-Funktionen, Details siehe 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

    Dies ist ein sehr praktisches Feature, das normalerweise in Kombination mit Generika verwendet wird.

Standardbibliothek

  1. Neue Standardbibliothek iter, die detaillierte Informationen über Iteratoren definiert und beschreibt

  2. maps-Bibliothek hat mehrere Iterator-Funktionen hinzugefügt

  3. slices-Bibliothek hat mehrere Iterator-Funktionen hinzugefügt

  4. Neue structs-Bibliothek, bietet die Möglichkeit, Strukturfelder zu ändern, wie z. B. das Speicherlayout

    go
    type Person struct {
      Name string
      Age  int
      _    structs.HostLayout
    }
  5. Optimierte Implementierung der time-Standardbibliothek

Linker

  1. Behandlung des Missbrauchs von //go:linkname, für einige häufig referenzierte APIs ist die Existenz vorübergehend erlaubt, wie runtime.memhash64, runtime.nanotime usw. Andere neue Referenzen werden in Zukunft nicht mehr erlaubt.

    go
    //go:linkname gcinit runtime.gcinit
    func gcinit()
    
    func main() {
      gcinit()
    }

    Solcher Code kann nicht kompiliert werden

    link: main: invalid reference to runtime.gcinit

Toolchain

  1. Neuer Befehl go telemetry zur Telemetrie-Datenverwaltung

1.22

Erstveröffentlichung: 2024-02-06

Letztes Update: go1.22.6 (veröffentlicht 2024-08-06)

Das detaillierte Update-Log der Version go1.22 finden Sie unter Go 1.22 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.22 - Release Patch.

Sprachebene

  1. Das Problem der Go-Schleifenvariablen wurde gelöst

    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()
    }

    Dieser Code gab vor 1.22 zehnmal 9 aus, nach 1.22 wird korrekt 0 bis 9 ausgegeben.

  2. for range unterstützt jetzt die Iteration über Zahlentypen, wie folgt

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

Standardbibliothek

  1. Verbessertes Routing der net/http-Standardbibliothek

  2. database/sql hat neuen generischen Typ sql.Null hinzugefügt

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

    Verwendung wie folgt

    go
    type Person struct {
      Name sql.Null[string]
      Age  sql.Null[int]
    }

1.21

Erstveröffentlichung: 2023-08-08

Letztes Update: go1.21.13 (veröffentlicht 2024-08-06)

Das detaillierte Update-Log der Version go1.21 finden Sie unter Go 1.21 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.21 - Release Patch.

Sprachebene

  1. Zwei neue eingebaute Funktionen min und max wurden hinzugefügt, um den größten und kleinsten Wert zu berechnen.

  2. Neue eingebaute Funktion clear zum Leeren von Map und Slice

  3. Aktualisierte package-Initialisierungsreihenfolge

    • Alle Pakete nach Importpfad sortieren
    • Wiederholen, bis die Paketliste leer ist
    • Das erste Paket finden, dessen alle Importe bereits initialisiert wurden
    • Dieses Paket initialisieren und aus der Liste entfernen
  4. Verbesserte Typinferenz mit höherer Fähigkeit und Genauigkeit, hauptsächlich generika-bezogen.

  5. Vorabversion der Verbesserung der for range-Schleifenvariablen veröffentlicht. Dies war ein Problem, das Go-Entwickler fast zehn Jahre lang beschäftigt hat. Offiziell wird es endlich gelöst. Details siehe: LoopvarExperiment · golang/go Wiki (github.com) und Proposal: Less Error-Prone Loop Variable Scoping (googlesource.com)

  6. Garantiert, dass der Rückgabewert von recover nicht nil ist. Wenn beim Aufruf von panic der Parameter nil ist, wird ein weiterer panic ausgelöst, der *runtime.PanicNilError zurückgibt. Für Kompatibilität kann zur Kompilierzeit GODEBUG=panicnil=1 gesetzt werden, um nil an panic zu übergeben.

Standardbibliothek

  1. Neue log/slog-Bibliothek, bietet eine Standard-Logging-Bibliothek mit Strukturierung
  2. Neue testing/slogtest-Bibliothek zur Validierung von slog.Handler-Implementierungen
  3. Neue slices-Bibliothek, bietet eine Reihe generischer Funktionen zur Bearbeitung von Slices.
  4. Neue maps-Bibliothek, bietet eine Reihe generischer Funktionen zur Bearbeitung von Maps
  5. Neue cmp-Bibliothek zum Vergleich geordneter Typen.

Sonstiges

  1. go1.21.0 erfordert auf Windows-Systemen mindestens Windows 10 oder Windows Server 2016 oder höher, frühere Versionen werden nicht mehr unterstützt.
  2. go1.21.0 erfordert auf macOS mindestens 10.15 Catalina oder höher, frühere Versionen werden nicht mehr unterstützt.
  3. Experimentelle WebAssembly System Interface hinzugefügt. Go erkundet weiterhin den WASM-Bereich.
  4. In 1.20 noch experimentelles PGO (Profile-guide optimization) (siehe Profile-guided optimization - The Go Programming Language), in Version 1.21 offiziell aktiviert. Eine default.pgo-Datei im main-Paket aktiviert diese Funktion. Nach der Aktivierung kann die Leistung um 2%-7% steigen.
  5. Beim Drucken sehr tiefer Laufzeit-Aufrufstapel wird statt der ersten 100 Frames jetzt jeweils die ersten 50 und die letzten 50 Frames gedruckt.
  6. Die CGO-Aufrufleistung auf Unix-Plattformen wurde von 1-3 Mikrosekunden auf jetzt 100-200 Nanosekunden optimiert.
  7. In Version 1.21 wurde die Kompilierungsgeschwindigkeit um fast 6% verbessert, hauptsächlich weil der Compiler selbst mit PGO erstellt wird.

1.20

Erstveröffentlichung: 2023-02-01

Letztes Update: go1.20.14 (veröffentlicht 2024-02-06)

Das detaillierte Update-Log der Version go1.20 finden Sie unter Go 1.20 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.20 - Release Patch.

Sprachebene

  1. Bei der Konvertierung eines Slice-Typs in ein Array musste früher der Zeiger-Array-Dereferenzierungsoperator *(*[4byte])(x) verwendet werden, um zu vermeiden, dass mit dem Slice auf demselben zugrundeliegenden Array operiert wird. Jetzt kann direkt [4]byte(x) geschrieben werden.
  2. unsafe hat neue Funktionen SliceData, String, StringData zum Erstellen und Strukturieren von Slice- und String-Werten hinzugefügt.

Standardbibliothek

  1. Neue crypto/ecdh-Bibliothek, bietet Unterstützung für ECDH (Elliptic Curve Diffie-Hellman, eine asymmetrische Verschlüsselungsmethode).
  2. go1.20 erweitert die Unterstützung für Error-Wrapping, erlaubt einem Error, mehrere Errors zu wrappen.
  3. Neue net/http.ResponseContorller, bietet eine sauberere, leichter zu entdeckende Methode zum Hinzufügen von Handler-Controls.
  4. httputil.ReverseProxy enthält eine neue Rewrite-Hook-Funktion, die den früheren Director-Hook ersetzt.

Sonstiges

  1. go1.20 ist die letzte Version, die Windows 7, 8, Server 2008 und Server 2012 unterstützt. Zukünftige Versionen werden keine Unterstützung mehr bieten.
  2. go1.20 ist die letzte Version, die macOS 10.13 oder 10.14 unterstützt. Zukünftige Versionen werden keine Unterstützung mehr bieten.
  3. In Versionen 1.18 und 1.19 war die Kompilierungsgeschwindigkeit im Vergleich zu 1.17 aufgrund von Generika zurückgegangen. go1.20 wird die Kompilierungsgeschwindigkeit um etwa 10% verbessern.
  4. Vorabversion von PGO (Profile-guided optimization) veröffentlicht, eine Compilertechnik zur Verbesserung der Laufzeitleistung.
  5. In go1.20 ist cgo auf Systemen ohne C-Toolchains deaktiviert.
  6. Unterstützung für das Sammeln von Programmcode-Abdeckungsdateien, siehe Coverage profiling support for integration tests - The Go Programming Language
  7. Verbesserungen an der GC für mehr Stabilität, weniger Speicherverbrauch und insgesamt 2% CPU-Leistungssteigerung.

1.19

Erstveröffentlichung: 2022-08-02

Letztes Update: go1.19.13 (veröffentlicht 2023-09-06)

Das detaillierte Update-Log der Version go1.19 finden Sie unter Go 1.19 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.19 - Release Patch.

Wichtige Änderungen

  1. Speichermodell an C/C++ angeglichen, ähnlich wie TcMalloc

  2. Das sync/atomic-Paket bietet jetzt mehr Typen zur Verwendung

  3. Unterstützung für die Funktion runtime/debug.SetMemoryLimit zum Setzen einer weichen Speicherbegrenzung für Go, was in bestimmten Situationen die Speichernutzungseffizienz verbessern kann

  4. Die Laufzeitumgebung wählt jetzt basierend auf der durchschnittlichen Nutzung der Goroutine-Stacks eine passende Größe für die Initialisierung des Stack-Speichers, um häufiges Stack-Wachsen und -Schrumpfen zu vermeiden

1.18

Erstveröffentlichung: 2022-03-15

Letztes Update: go1.18.10 (veröffentlicht 2023-01-10)

Das detaillierte Update-Log der Version go1.18 finden Sie unter Go 1.18 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.18 - Release Patch.

Sprachebene

  1. Schwergewichtiges Update: Unterstützung für Generika, Typ-Set-Interfaces, Parametertyp-Einschränkungen

Sonstiges

  1. Das Erweiterungsverhalten der append-Funktion wurde optimiert
  2. Neues debug/buildinfo-Paket, das Build-Informationen von Go-Programmen zur Laufzeit abrufen kann
  3. gofmt kann jetzt Quelldateien parallel formatieren

1.17

Erstveröffentlichung: 2021-08-16

Letztes Update: go1.17.13 (veröffentlicht 2022-08-01)

Das detaillierte Update-Log der Version go1.17 finden Sie unter Go 1.17 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.17 - Release Patch.

Sprachebene

  1. Neue unsafe.Add-Funktion, unterstützt Zeigerarithmetik
  2. Neue unsafe.Slice-Funktion, unterstützt das Abrufen des Zeigers auf das zugrundeliegende Array eines Slices
  3. Slices können jetzt in Array-Zeiger-Typen konvertiert werden, []T => *[N]T, vorausgesetzt die Array-Länge ist kleiner oder gleich der Slice-Länge

1.16

Erstveröffentlichung: 2021-02-16

Letztes Update: go1.16.15 (veröffentlicht 2022-03-03)

Das detaillierte Update-Log der Version go1.16 finden Sie unter Go 1.16 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.16 - Release Patch.

Wichtige Änderungen

Diese Version hat keine wichtigen Syntax-Änderungen. Einige wichtige Änderungen sind:

  1. Das ioutil-Paket ist veraltet
  2. Unterstützung für das Einbetten statischer Dateien in Programme über die //go:embed-Direktive
  3. Neuer io/fs.Fs-Typ für eine bessere Abstraktion von Dateisystemen

1.15

Erstveröffentlichung: 2020-08-11

Letztes Update: go1.15.15 (veröffentlicht 2021-08-05)

Das detaillierte Update-Log der Version go1.15 finden Sie unter Go 1.15 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.15 - Release Patch.

Wichtige Änderungen

Diese Version hat keine wichtigen Syntax-Änderungen. Einige wichtige Änderungen sind:

  1. Optimierung der Zuweisungseffizienz für kleine Objekte

  2. Neues Paket time/tzdata, unterstützt das Einbetten der Zeitzonen-Datenbank in das Programm durch folgende Methode, da viele Systeme lokal keine Zeitzonen-Dateninformationen haben.

    go
    import _ "time/tzdata"
  3. Wichtige Verbesserungen am Go-Linker, Reduzierung des Ressourcenverbrauchs und Verbesserung der Code-Robustheit

  4. In bestimmten Fällen ist die Konvertierung von unsafe.Pointer zu uintptr erlaubt

1.14

Erstveröffentlichung: 2020-02-25

Letztes Update: go1.14.15 (veröffentlicht 2021-02-04)

Das detaillierte Update-Log der Version go1.14 finden Sie unter Go 1.14 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.14 - Release Patch.

Sprachebene

  1. Unterstützung für das Einbetten von Methoden-Set-Interface-Typen

    go
    type MyIO interface {
      io.WriteCloser
    }

Sonstiges

  1. Open-Coding-Optimierung eingeführt, der Overhead von defer-Aufrufen wurde auf fast den gleichen Wert wie native Aufrufe reduziert
  2. Unterstützung für asynchrone Präemption zwischen Goroutinen, Schleifen ohne Funktionsaufrufe blockieren das Scheduling nicht mehr dauerhaft

1.13

Erstveröffentlichung: 2019-09-03

Letztes Update: go1.13.15 (veröffentlicht 2020-08-06)

Das detaillierte Update-Log der Version go1.13 finden Sie unter Go 1.13 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.13 - Release Patch.

Sprachebene

  1. Unterstützung für modernere numerische Literale, wie

    go
    0b101 // Binär
    0o10  // Oktal
    0x1B  // Hexadezimal

    Unterstützung für Unterstriche zur Trennung von Zahlen für bessere Lesbarkeit

    go
    10_000

    Das Suffix i für imaginäre Zahlen kann jetzt jede binäre, dezimale, hexadezimale oder Fließkommazahl sein

Sonstiges

  1. Der Standardwert von GO111MODULE ist auto
  2. Neue Umgebungsvariable GOPRIVATE zur Unterstützung privater Abhängigkeitsquellen
  3. Neue Umgebungsvariable GOSUMDB
  4. Der Overhead der Verwendung von defer wurde um 30% reduziert
  5. Bei Index-Out-of-Bounds gibt panic jetzt die Index-Information aus
  6. Go validiert semantische Versionen beim Herunterladen von Abhängigkeiten

1.12

Erstveröffentlichung: 2019-02-25

Letztes Update: go1.12.17 (veröffentlicht 2020-02-12)

Das detaillierte Update-Log der Version go1.12 finden Sie unter Go 1.12 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.12 - Release Patch.

Wichtige Änderungen

Diese Version hat keine wichtigen Syntax-Änderungen. Einige wichtige Änderungen sind:

  1. Erhebliche Verbesserung der Heap-Scan-Leistung
  2. Die Laufzeitumgebung gibt angeforderten Speicher aggressiver an das Betriebssystem zurück
  3. Die Befehle zum Herunterladen von Go-Abhängigkeiten können jetzt nebenläufig sicher verwendet werden

1.11

Erstveröffentlichung: 2018-08-24

Letztes Update: go1.11.13 (veröffentlicht 2019-08-13)

Das detaillierte Update-Log der Version go1.11 finden Sie unter Go 1.11 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.11 - Release Patch.

Wichtige Änderungen

Diese Version hat keine wichtigen Syntax-Änderungen. Einige wichtige Änderungen sind:

  1. GoMod erstmals veröffentlicht, das chaos in der Abhängigkeitsverwaltung wird beendet
  2. Erste experimentelle Unterstützung für WASM
  3. Die Laufzeitumgebung verwendet spärliche Heap-Layouts, keine Heap-Größenbeschränkung mehr

1.10

Erstveröffentlichung: 2018-02-16

Letztes Update: go1.10.8 (veröffentlicht 2019-01-23)

Das detaillierte Update-Log der Version go1.10 finden Sie unter Go 1.10 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.10 - Release Patch.

Wichtige Änderungen

Diese Version hat keine wichtigen Syntax-Änderungen. Einige wichtige Änderungen sind:

  1. Der Befehl go install wird jetzt nur noch zum Installieren und Kompilieren von Kommandozeilen-Tools verwendet, nicht mehr zum Herunterladen von Abhängigkeiten
  2. Der Befehl go get wird jetzt zum Herunterladen von Quellcode-Abhängigkeiten verwendet
  3. Go-Tests cachen jetzt Testergebnisse und führen vor der Ausführung automatisch go vet aus
  4. Erhebliche Reduzierung der Latenz durch GC bei Aktivität

1.9

Erstveröffentlichung: 2017-08-24

Letztes Update: go1.9.7 (veröffentlicht 2018-06-05)

Das detaillierte Update-Log der Version go1.9 finden Sie unter Go 1.9 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.9 - Release Patch.

Sprachebene

  1. Unterstützung für Typ-Aliase

Sonstiges

  1. Unterstützung für parallele Kompilierung
  2. Neue nebenläufig sichere sync.Map

1.8

Erstveröffentlichung: 2017-02-16

Letztes Update: go1.8.7 (veröffentlicht 2018-02-07)

Das detaillierte Update-Log der Version go1.8 finden Sie unter Go 1.8 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.8 - Release Patch.

Sprachebene

  1. Bei der Typkonvertierung zwischen zwei Structs wird der Unterschied der Struct-Tags ignoriert

    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) // jetzt erlaubt
    }

Sonstiges

  1. Die Pausenzeit durch Garbage Collection wurde auf bis zu 10 Mikrosekunden gesenkt, in den meisten Fällen unter 100 Mikrosekunden (man sieht, dass in fast jeder Version Go an der Verbesserung der GC arbeitet)
  2. Der Overhead beim Aufruf von defer wurde fast halbiert
  3. Der Overhead beim Aufruf von Go nach C wurde fast halbiert
  4. Optimierung der Erkennung der nebenläufigen Verwendung von Maps

1.7

Erstveröffentlichung: 2016-08-15

Letztes Update: go1.7.6 (veröffentlicht 2017-05-23)

Das detaillierte Update-Log der Version go1.7 finden Sie unter Go 1.7 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.7 - Release Patch.

Wichtige Änderungen

  1. golang.org/x/net/context wurde in die Standardbibliothek aufgenommen
  2. GC-Zeit im Vergleich zu 1.6 erheblich verkürzt
  3. Das testing-Paket unterstützt Sub-Tests

1.6

Erstveröffentlichung: 2016-02-17

Letztes Update: go1.6.4 (veröffentlicht 2016-12-01)

Das detaillierte Update-Log der Version go1.6 finden Sie unter Go 1.6 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.6 - Release Patch.

Wichtige Änderungen

Diese Version hat keine Syntax-Änderungen. Wichtige Änderungen sind:

  1. Erkennung der nebenläufigen Verwendung von Maps. Wenn erkannt wird, dass eine Map nebenläufig verwendet wird, wird ein fatal ausgelöst
  2. Bei einem panic wird nur der Aufruf-Stack der gerade ausgeführten Goroutine gedruckt
  3. Unterstützung für HTTP/2

1.5

Erstveröffentlichung: 2015-08-19

Letztes Update: go1.5.4 (veröffentlicht 2016-04-12)

Das detaillierte Update-Log der Version go1.5 finden Sie unter Go 1.5 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.5 - Release Patch.

Sprachebene

  1. Bei der Initialisierung von Map-Literalen kann der Elementtyp bei Schlüsseln weggelassen werden

    go
    m := map[Point]string{
        Point{29.935523, 52.891566}:   "Persepolis",
        Point{-25.352594, 131.034361}: "Uluru",
        Point{37.422455, -122.084306}: "Googleplex",
    }
    
    // Typ weglassen
    m := map[Point]string{
        {29.935523, 52.891566}:   "Persepolis",
        {-25.352594, 131.034361}: "Uluru",
        {37.422455, -122.084306}: "Googleplex",
    }

Sonstiges

  1. Laufzeitumgebung und Compiler vollständig in Go neu geschrieben, enthalten keinen C-Code mehr
  2. Unterstützung für nebenläufige Garbage Collection, Programmpausen erheblich reduziert
  3. Der Standardwert von GOMAXPROCS entspricht jetzt der logischen Kernzahl der Maschine
  4. Die Semantik von internal-Paketen kann überall angewendet werden, nicht mehr nur auf Go-Quellpakete beschränkt
  5. Experimentelle Unterstützung für Vendor-Abhängigkeitsverwaltung (endlich wurde mit der Lösung des Abhängigkeitsmanagements begonnen)

1.4

Erstveröffentlichung: 2014-12-10

Letztes Update: go1.4.3 (veröffentlicht 2015-09-22)

Das detaillierte Update-Log der Version go1.4 finden Sie unter Go 1.4 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.4 - Release Patch.

Sprachebene

  1. Die for range-Schleife kann einen Iterationsparameter haben, wie

    for i := range x {
        ...
    }

    Aber nicht gar keinen

  2. Beim Aufrufen von Methoden auf doppelt referenzierten Typen wird nicht mehr automatisch dereferenziert

    go
    type T int
    func (T) M() {}
    var x **T
    
    // nicht erlaubt
    x.M()

Sonstiges

  1. Vor 1.4 war die Go-Laufzeitumgebung in C geschrieben, jetzt komplett in Go
  2. Unterstützung für die Umbenennung von Paketen zu internal, um anzuzeigen, dass der gesamte Inhalt des Pakets privat und nicht exportiert ist

1.3

Erstveröffentlichung: 2014-06-18

Letztes Update: go1.3.3 (veröffentlicht 2014-09-30)

Das detaillierte Update-Log der Version go1.3 finden Sie unter Go 1.3 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.3 - Release Patch.

Wichtige Änderungen

Diese Version hat keine Syntax-Änderungen. Einige wichtige Änderungen sind:

  1. Das Goroutine-Stack-Modell wurde von segmentiertem Stack zu kontinuierlichem Stack geändert, was die Leistung der Stack-Erweiterung verbessert.
  2. Verbesserte Genauigkeit der Zeigerbeurteilung im Garbage Collector
  3. Bei der Iteration über Maps mit kleiner Kapazität wird die Reihenfolge unvorhersehbar
  4. Aufgrund einiger Verbesserungen in der Laufzeitumgebung wurde die Leistung von Go-Programmen in dieser Version erheblich gesteigert

1.2

Erstveröffentlichung: 2013-12-01

Letztes Update: go1.2.2 (veröffentlicht 2014-05-05)

Das detaillierte Update-Log der Version go1.2 finden Sie unter Go 1.2 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.2 - Release Patch.

Sprachebene

  1. Operationen auf Variablen mit dem Wert nil lösen panic aus

  2. Beim Aufteilen von Slices kann ein dritter Parameter verwendet werden, um die Kapazität des aufgeteilten Slices zu begrenzen, um Slices sicherer zu verwenden

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

Sonstiges

  1. Die minimale Speichergröße für Goroutine-Stacks wurde von 4KB auf 8KB erhöht

  2. Die maximale Thread-Anzahl wurde auf 10000 begrenzt

  3. Lange laufende Goroutinen werden bei Funktionsaufrufen präemptiert (erste Einführung von kooperativer Präemption)

1.1

Erstveröffentlichung: 2013-05-13

Letztes Update: go1.1.2 (veröffentlicht 2013-08-13)

Das detaillierte Update-Log der Version go1.1 finden Sie unter Go 1.1 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.1 - Release Patch.

Sprachebene

  1. Eine Division durch Null löste früher panic aus, ab 1.1 kann der Code gar nicht mehr kompiliert werden.
  2. Methoden können als Wert existieren.
  3. Das Konzept der Terminierungsanweisung wurde eingeführt, die Rückgaberegeln für Funktionen sind flexibler, Definition der Terminierungsanweisung - go-spec.

Leistungsaspekte

  1. Die Leistung von Go-Programmen, die mit dem go1.1-Tool kompiliert wurden, kann um etwa 30%-40% gesteigert werden

Sonstiges:

  1. Auf 64-Bit-Systemen wurde der maximale Heap-Speicher auf mehrere zehn GB erhöht
  2. Bei Cross-Kompilierung ist cgo standardmäßig deaktiviert

1.0

Erstveröffentlichung: 2012-03-28

Das detaillierte Update-Log der Version go1.0 finden Sie unter Go 1.0 Release Notes. Alle während der Wartungszeit veröffentlichten Patch-Versionen finden Sie unter Go1.0 - Release Patch.

Sprachebene

Im Vergleich zur Vorschauversion wurden syntaktisch folgende Dinge hinzugefügt:

  1. Neue eingebaute append-Funktion zum Hinzufügen von Elementen zu Slices

  2. Neue eingebaute close-Funktion zum Schließen von Channels

  3. Zusammengesetzte Semantik: Bei der Initialisierung von Slice-, Map- und Struct-Literalen kann der Typ weggelassen werden, wie folgt

    go
    // Typ deklarieren
    holiday1 := []Date{
        Date{"Feb", 14},
        Date{"Nov", 11},
        Date{"Dec", 25},
    }
    
    // Typ weglassen
    holiday2 := []Date{
        {"Feb", 14},
        {"Nov", 11},
        {"Dec", 25},
    }
  4. Goroutinen, die in der init-Funktion verwendet werden, starten sofort, ohne darauf zu warten, dass alle Pakete initialisiert sind.

  5. Neuer rune-Typ, repräsentiert ein UTF-8-Zeichen

  6. Neues eingebautes error-Interface, repräsentiert den Fehlertyp

  7. Neue eingebaute delete-Funktion zum Löschen von Schlüssel-Wert-Paaren in Maps

  8. Die Reihenfolge der Iteration über Maps mit for range wird unvorhersehbar

  9. Unterstützung für gleichzeitige Zuweisung an mehrere Variablen

    a := 1
    b := 2
    a, b = 3, 4
  10. Problem der Variablenverschattung: Wenn eine Funktion benannte Rückgabewerte hat und einer der Rückgabewerte verschattet wird, muss die return-Anweisung den Rückgabewert tragen, sonst wird der Code nicht kompiliert. Hier ist ein fehlerhaftes Beispiel:

    go
    func Bug() (i, j, k int) {
        for i = 0; i < 5; i++ {
            for j := 0; j < 5; j++ { // Deklariert j neu.
                k += i * j
                if k > 100 {
                    return // Abgelehnt: j ist hier verschattet.
                }
            }
        }
        return // OK: j ist hier nicht verschattet.
    }
  11. Erlaubt das Kopieren von Struct-Werten mit privaten Feldern

  12. Wenn Structs und Slices aus vergleichbaren Elementen bestehen, sind sie als Map-Schlüssel erlaubt, gleichzeitig wurde die Vergleichbarkeit von Funktionen und Maps entfernt

Neben der Sprachebene hatte go1.0 sehr große Änderungen in der Organisation von Paketen, der Standardbibliothek und der Kommandozeile im Vergleich zur Vorschauversion. Da der Inhalt zu umfangreich ist, wird hier nicht weiter darauf eingegangen. Bei Interesse können Sie die offizielle Website selbst konsultieren.

pre

Vor der offiziellen Veröffentlichung von go1 wurden alle Versionen als Vorschauversionen bezeichnet. Für diese Vorschauversionen veröffentlichte die offizielle Seite wöchentlich eine Snapshot-Version. Wichtige Versionen sind unter anderem:

  • r60 (2011-09-07), legte fest, dass der else-Block jetzt Klammern haben muss
  • r59 (2011-08-01), entwarf ein neues Struct-Tag-Schema
  • r58 (2011-06-29), behob das Problem der nicht initialisierten Speichers durch Missbrauch von goto, fügte gui- und exec-Pakete hinzu
  • r57 (2011-05-03), unterstützte die Syntax für kurze Variablen-Mehrfachzuweisung, entwarf die http- und reflect-Pakete neu, machte gotest zu einem Go-Programm statt einem Shell-Skript
  • r56 (2011-03-07), erste stabile Version

Die Entwicklung der Vorschauversionen begann am 09. Dezember 2009 und endete mit der offiziellen Veröffentlichung von go1 am 28. März 2012. Sie dauerte fast drei Jahre. Danach wurden keine wöchentlichen Snapshot-Versionen mehr aufgezeichnet. Weitere Informationen zu diesen Hauptversionen finden Sie unter Pre-Go 1 Release History. Informationen zu allen wöchentlichen Snapshot-Versionen der Vorschauversionen finden Sie unter Weekly Snapshot History.

Golang by www.golangdev.cn edit