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
- Das Konzept des Core Type in Generics wurde entfernt, siehe offizieller Blogbeitrag Goodbye core types
Standardbibliothek
- Neu hinzugefügt
test/synctestzum Testen von nebenläufigem Code - 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/jsonbenchencoding/json/jsontext, bietet die Möglichkeit zur Low-Level-Interaktion mit JSON-Strings
Toolchain
- Zukünftige Go-Veröffentlichungen werden eine kleine Anzahl vorkompilierter Binär-Tools enthalten
- go mod hat neue
ignore-Direktive hinzugefügt, um Ordner anzugeben, die der go-Befehl ignorieren soll go doc -httpkann einen lokalen HTTP-Server starten, um Code-Dokumentation anzuzeigen- go vet hat neue
waitgroup- undhostport-Analyzer hinzugefügt - Wenn die go-Kommandozeile die Go-Version in
go.mododergo.workaktualisiert, wird die angegebene go toolchain version nicht mehr hinzugefügt
Laufzeitumgebung
GOMAXPROCS berücksichtigt in Container-Umgebungen die CPU-Limits des Containers
Neue experimentelle GC
greenteagc, die grundlegende Scheduling-Einheit der GC hat sich von Objekt zu Memory Span geändertWenn ein Panic nicht abgefangen wird, wird er nicht mehr wiederholt ausgegeben
panic: PANIC [recovered] panic: PANICwird zu
panic: PANIC [recovered, repanicked]Neu hinzugefügt
runtime/trace.FlightRecorder, der Laufzeitausführungsinformationen kontinuierlich und leichtgewichtiger erfassen kann
Compiler
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
gopackage 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) }Der Compiler reserviert mehr Backup-Speicher für Slices auf dem Stack, um die Nutzungsleistung zu verbessern
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
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
goimport ( "other" ) type MyQuque[T any] = other.Queue[T]
Standardbibliothek
- 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 Zeigernilist - Dateisystem-Zugriffsbeschränkung: Einführung des
os.Root-Typs, der Dateioperationen auf ein bestimmtes Verzeichnis beschränkt und die Sicherheit erhöht - Kryptografie- und Hash-Unterstützung: Neue Pakete
crypto/mlkem,crypto/hkdf,crypto/pbkdf2undcrypto/sha3, Optimierung der Leistung bestehender Kryptografie-Algorithmen - Neue Benchmark-Funktion
testing.B.Loopfür bessere Schleifentests encoding/json: Neuesomitzero-Tag, unterstützt Nullwert-Filterung basierend auf derIsZero()-Methodestringsundbytes: Neue Iterator-Funktionen (wieLines,SplitSeq,FieldsSeq)
Laufzeitumgebung
- Neugestaltung der integrierten Map basierend auf Swiss Tables, Zugriffsgeschwindigkeit bei großen Maps um 30% verbessert, Iterationsgeschwindigkeit um 10%-60% verbessert
sync.Mapverwendet jetzt Concurrent Hash Trie (hash-trie) zur Leistungsoptimierung, besonders bei nebenläufigem Schreiben- Mutexe in der Laufzeitumgebung verwenden neue Spinbit-Implementierung, reduziert Lock-Konflikte und verbessert die Leistung in Szenarien mit hoher Nebenläufigkeit
- Optimierte Zuweisungsstrategie für kleine Objekte, reduziert Speicherfragmentierung und GC-Pausenzeiten
- Neu hinzugefügt
runtime.AddCleanupals Ersatz fürruntime.SetFinalizer, unterstützt die Registrierung mehrerer Bereinigungsfunktionen für Objekte, die sequenziell in einer eigenen Goroutine ausgeführt werden
Cgo
- Unterstützung für
#cgo noescapeund#cgo nocallbackAnnotationen, die bzw. deklarieren, dass C-Funktionen keinen Speicher escapen lassen und keine Go-Funktionen zurückrufen, was die Laufzeitleistung verbessert - 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)undvoid f(double)), um falsche Aufrufsequenzen zu vermeiden
Toolchain
- Modul-Tool-Abhängigkeitsmanagement: Verfolgung von Tool-Abhängigkeiten durch die tool-Direktive in go.mod, ersetzt die traditionelle tools.go-Leerimport-Lösung
- Strukturierte Ausgabe: go build und go test unterstützen das -json-Flag, geben Build- und Testergebnisse im JSON-Format aus
- Kompilierungs- und Link-Optimierung: Compiler generiert effizienteren Code, Linker generiert standardmäßig GNU Build ID (ELF-Plattform) und UUID (macOS)
- Verbietet das Umgehen von Beschränkungen für Methodendefinitionen auf CGO-generierten Typen durch Aliase
go buildbettet automatisch Versionskontrollsystem-Informationen in Binärdateien ein (unterstützt-buildvcs=falsezum Deaktivieren)GOAUTH-Umgebungsvariable unterstützt Authentifizierung für private Modulego.modunterstützttool-Direktive zur Verwaltung von ausführbaren Abhängigkeiten, ersetzttools.go-Leerimport- Neue Befehle
go get -toolundgo install toolzur Verwaltung von Modul-Tool-Abhängigkeiten - Build-Cache unterstützt Binär-Cache für
go runundgo tool objdumpunterstützt LoongArch, RISC-V, S390X Disassemblierungvethat neuentests-Analyzer hinzugefügt (erkennt Fehler in Testfunktions-Signaturen)
Plattformkompatibilität
- macOS: Go 1.24 ist die letzte Version, die macOS 11 Big Sur unterstützt. Go 1.25 erfordert macOS 12+
- Windows: 32-Bit-ARM-Architektur als unvollständig markiert (GOOS=windows GOARCH=arm), siehe Issue #70705
- Linux: Minimale Kernel-Version auf 3.2 erhöht
- Erfordert Go 1.22.6+ als Bootstrap-Toolchain
Veraltet
math/rand.Seed()funktioniert nicht mehr, muss durchGODEBUG=randseednop=0wiederhergestellt werden, um das alte Verhalten zu erhaltenruntime.GOROOT()als veraltet markiert, empfohlen, den Pfad übergo env GOROOTzu 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
for range unterstützt Iterator-Funktionen, Details siehe 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 : GOLANGDies ist ein sehr praktisches Feature, das normalerweise in Kombination mit Generika verwendet wird.
Standardbibliothek
Neue Standardbibliothek
iter, die detaillierte Informationen über Iteratoren definiert und beschreibtmaps-Bibliothek hat mehrere Iterator-Funktionen hinzugefügtslices-Bibliothek hat mehrere Iterator-Funktionen hinzugefügtNeue
structs-Bibliothek, bietet die Möglichkeit, Strukturfelder zu ändern, wie z. B. das Speicherlayoutgotype Person struct { Name string Age int _ structs.HostLayout }Optimierte Implementierung der
time-Standardbibliothek
Linker
Behandlung des Missbrauchs von
//go:linkname, für einige häufig referenzierte APIs ist die Existenz vorübergehend erlaubt, wieruntime.memhash64,runtime.nanotimeusw. 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
- Neuer Befehl
go telemetryzur 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
Das Problem der Go-Schleifenvariablen wurde gelöst
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() }Dieser Code gab vor 1.22 zehnmal 9 aus, nach 1.22 wird korrekt 0 bis 9 ausgegeben.
for rangeunterstützt jetzt die Iteration über Zahlentypen, wie folgtgofor i := range 10 { fmt.Println(i) }
Standardbibliothek
Verbessertes Routing der
net/http-Standardbibliothekdatabase/sqlhat neuen generischen Typsql.Nullhinzugefügtgotype Null[T any] struct { V T Valid bool }Verwendung wie folgt
gotype 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
Zwei neue eingebaute Funktionen
minundmaxwurden hinzugefügt, um den größten und kleinsten Wert zu berechnen.Neue eingebaute Funktion
clearzum Leeren von Map und SliceAktualisierte
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
Verbesserte Typinferenz mit höherer Fähigkeit und Genauigkeit, hauptsächlich generika-bezogen.
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)Garantiert, dass der Rückgabewert von
recovernichtnilist. Wenn beim Aufruf vonpanicder Parameternilist, wird ein weitererpanicausgelöst, der*runtime.PanicNilErrorzurückgibt. Für Kompatibilität kann zur KompilierzeitGODEBUG=panicnil=1gesetzt werden, umnilanpaniczu übergeben.
Standardbibliothek
- Neue
log/slog-Bibliothek, bietet eine Standard-Logging-Bibliothek mit Strukturierung - Neue
testing/slogtest-Bibliothek zur Validierung vonslog.Handler-Implementierungen - Neue
slices-Bibliothek, bietet eine Reihe generischer Funktionen zur Bearbeitung von Slices. - Neue
maps-Bibliothek, bietet eine Reihe generischer Funktionen zur Bearbeitung von Maps - Neue
cmp-Bibliothek zum Vergleich geordneter Typen.
Sonstiges
- 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.
- go1.21.0 erfordert auf macOS mindestens 10.15 Catalina oder höher, frühere Versionen werden nicht mehr unterstützt.
- Experimentelle WebAssembly System Interface hinzugefügt. Go erkundet weiterhin den WASM-Bereich.
- 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. - Beim Drucken sehr tiefer Laufzeit-Aufrufstapel wird statt der ersten 100 Frames jetzt jeweils die ersten 50 und die letzten 50 Frames gedruckt.
- Die CGO-Aufrufleistung auf Unix-Plattformen wurde von 1-3 Mikrosekunden auf jetzt 100-200 Nanosekunden optimiert.
- 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
- 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. unsafehat neue FunktionenSliceData,String,StringDatazum Erstellen und Strukturieren von Slice- und String-Werten hinzugefügt.
Standardbibliothek
- Neue
crypto/ecdh-Bibliothek, bietet Unterstützung für ECDH (Elliptic Curve Diffie-Hellman, eine asymmetrische Verschlüsselungsmethode). - go1.20 erweitert die Unterstützung für Error-Wrapping, erlaubt einem Error, mehrere Errors zu wrappen.
- Neue
net/http.ResponseContorller, bietet eine sauberere, leichter zu entdeckende Methode zum Hinzufügen von Handler-Controls. httputil.ReverseProxyenthält eine neue Rewrite-Hook-Funktion, die den früheren Director-Hook ersetzt.
Sonstiges
- 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.
- go1.20 ist die letzte Version, die macOS 10.13 oder 10.14 unterstützt. Zukünftige Versionen werden keine Unterstützung mehr bieten.
- 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.
- Vorabversion von PGO (Profile-guided optimization) veröffentlicht, eine Compilertechnik zur Verbesserung der Laufzeitleistung.
- In go1.20 ist cgo auf Systemen ohne C-Toolchains deaktiviert.
- Unterstützung für das Sammeln von Programmcode-Abdeckungsdateien, siehe Coverage profiling support for integration tests - The Go Programming Language
- 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
Speichermodell an C/C++ angeglichen, ähnlich wie TcMalloc
Das
sync/atomic-Paket bietet jetzt mehr Typen zur VerwendungUnterstützung für die Funktion
runtime/debug.SetMemoryLimitzum Setzen einer weichen Speicherbegrenzung für Go, was in bestimmten Situationen die Speichernutzungseffizienz verbessern kannDie 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
- Schwergewichtiges Update: Unterstützung für Generika, Typ-Set-Interfaces, Parametertyp-Einschränkungen
Sonstiges
- Das Erweiterungsverhalten der
append-Funktion wurde optimiert - Neues
debug/buildinfo-Paket, das Build-Informationen von Go-Programmen zur Laufzeit abrufen kann - 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
- Neue
unsafe.Add-Funktion, unterstützt Zeigerarithmetik - Neue
unsafe.Slice-Funktion, unterstützt das Abrufen des Zeigers auf das zugrundeliegende Array eines Slices - 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:
- Das
ioutil-Paket ist veraltet - Unterstützung für das Einbetten statischer Dateien in Programme über die
//go:embed-Direktive - 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:
Optimierung der Zuweisungseffizienz für kleine Objekte
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.goimport _ "time/tzdata"Wichtige Verbesserungen am Go-Linker, Reduzierung des Ressourcenverbrauchs und Verbesserung der Code-Robustheit
In bestimmten Fällen ist die Konvertierung von
unsafe.Pointerzuuintptrerlaubt
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
Unterstützung für das Einbetten von Methoden-Set-Interface-Typen
gotype MyIO interface { io.WriteCloser }
Sonstiges
- Open-Coding-Optimierung eingeführt, der Overhead von
defer-Aufrufen wurde auf fast den gleichen Wert wie native Aufrufe reduziert - 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
Unterstützung für modernere numerische Literale, wie
go0b101 // Binär 0o10 // Oktal 0x1B // HexadezimalUnterstützung für Unterstriche zur Trennung von Zahlen für bessere Lesbarkeit
go10_000Das Suffix
ifür imaginäre Zahlen kann jetzt jede binäre, dezimale, hexadezimale oder Fließkommazahl sein
Sonstiges
- Der Standardwert von
GO111MODULEistauto - Neue Umgebungsvariable
GOPRIVATEzur Unterstützung privater Abhängigkeitsquellen - Neue Umgebungsvariable
GOSUMDB - Der Overhead der Verwendung von
deferwurde um 30% reduziert - Bei Index-Out-of-Bounds gibt
panicjetzt die Index-Information aus - 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:
- Erhebliche Verbesserung der Heap-Scan-Leistung
- Die Laufzeitumgebung gibt angeforderten Speicher aggressiver an das Betriebssystem zurück
- 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:
- GoMod erstmals veröffentlicht, das chaos in der Abhängigkeitsverwaltung wird beendet
- Erste experimentelle Unterstützung für WASM
- 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:
- Der Befehl
go installwird jetzt nur noch zum Installieren und Kompilieren von Kommandozeilen-Tools verwendet, nicht mehr zum Herunterladen von Abhängigkeiten - Der Befehl
go getwird jetzt zum Herunterladen von Quellcode-Abhängigkeiten verwendet - Go-Tests cachen jetzt Testergebnisse und führen vor der Ausführung automatisch
go vetaus - 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
- Unterstützung für Typ-Aliase
Sonstiges
- Unterstützung für parallele Kompilierung
- 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
Bei der Typkonvertierung zwischen zwei Structs wird der Unterschied der Struct-Tags ignoriert
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) // jetzt erlaubt }
Sonstiges
- 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)
- Der Overhead beim Aufruf von
deferwurde fast halbiert - Der Overhead beim Aufruf von Go nach C wurde fast halbiert
- 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
golang.org/x/net/contextwurde in die Standardbibliothek aufgenommen- GC-Zeit im Vergleich zu 1.6 erheblich verkürzt
- 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:
- Erkennung der nebenläufigen Verwendung von Maps. Wenn erkannt wird, dass eine Map nebenläufig verwendet wird, wird ein
fatalausgelöst - Bei einem
panicwird nur der Aufruf-Stack der gerade ausgeführten Goroutine gedruckt - 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
Bei der Initialisierung von Map-Literalen kann der Elementtyp bei Schlüsseln weggelassen werden
gom := 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
- Laufzeitumgebung und Compiler vollständig in Go neu geschrieben, enthalten keinen C-Code mehr
- Unterstützung für nebenläufige Garbage Collection, Programmpausen erheblich reduziert
- Der Standardwert von
GOMAXPROCSentspricht jetzt der logischen Kernzahl der Maschine - Die Semantik von
internal-Paketen kann überall angewendet werden, nicht mehr nur auf Go-Quellpakete beschränkt - 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
Die
for range-Schleife kann einen Iterationsparameter haben, wiefor i := range x { ... }Aber nicht gar keinen
Beim Aufrufen von Methoden auf doppelt referenzierten Typen wird nicht mehr automatisch dereferenziert
gotype T int func (T) M() {} var x **T // nicht erlaubt x.M()
Sonstiges
- Vor 1.4 war die Go-Laufzeitumgebung in C geschrieben, jetzt komplett in Go
- 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:
- Das Goroutine-Stack-Modell wurde von segmentiertem Stack zu kontinuierlichem Stack geändert, was die Leistung der Stack-Erweiterung verbessert.
- Verbesserte Genauigkeit der Zeigerbeurteilung im Garbage Collector
- Bei der Iteration über Maps mit kleiner Kapazität wird die Reihenfolge unvorhersehbar
- 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
Operationen auf Variablen mit dem Wert
nillösenpanicausBeim Aufteilen von Slices kann ein dritter Parameter verwendet werden, um die Kapazität des aufgeteilten Slices zu begrenzen, um Slices sicherer zu verwenden
govar array [10]int slice := array[2:4:4]
Sonstiges
Die minimale Speichergröße für Goroutine-Stacks wurde von 4KB auf 8KB erhöht
Die maximale Thread-Anzahl wurde auf 10000 begrenzt
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
- Eine Division durch Null löste früher
panicaus, ab 1.1 kann der Code gar nicht mehr kompiliert werden. - Methoden können als Wert existieren.
- Das Konzept der Terminierungsanweisung wurde eingeführt, die Rückgaberegeln für Funktionen sind flexibler, Definition der Terminierungsanweisung - go-spec.
Leistungsaspekte
- Die Leistung von Go-Programmen, die mit dem go1.1-Tool kompiliert wurden, kann um etwa 30%-40% gesteigert werden
Sonstiges:
- Auf 64-Bit-Systemen wurde der maximale Heap-Speicher auf mehrere zehn GB erhöht
- 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:
Neue eingebaute
append-Funktion zum Hinzufügen von Elementen zu SlicesNeue eingebaute
close-Funktion zum Schließen von ChannelsZusammengesetzte 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}, }Goroutinen, die in der
init-Funktion verwendet werden, starten sofort, ohne darauf zu warten, dass alle Pakete initialisiert sind.Neuer
rune-Typ, repräsentiert ein UTF-8-ZeichenNeues eingebautes
error-Interface, repräsentiert den FehlertypNeue eingebaute
delete-Funktion zum Löschen von Schlüssel-Wert-Paaren in MapsDie Reihenfolge der Iteration über Maps mit
for rangewird unvorhersehbarUnterstützung für gleichzeitige Zuweisung an mehrere Variablen
a := 1 b := 2 a, b = 3, 4Problem 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:gofunc 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. }Erlaubt das Kopieren von Struct-Werten mit privaten Feldern
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.
