Programmiersprache: Go 1.16 Beta unterstützt ARM64-Architektur

Zwei Monate vor dem finalen Release steht die Beta-Version 1.16 mit Änderungen an der Core Library Go-Entwicklern zum Testen bereit.

In Pocket speichern vorlesen Druckansicht 8 Kommentare lesen

(Bild: Artur Szczybylo/Shutterstock.com)

Lesezeit: 3 Min.
Von
  • Silke Hahn
Inhaltsverzeichnis

Go, eine ursprünglich von Google entwickelte quelloffene Programmiersprache, liegt in Version 1.16 als Beta vor. Wichtigste Neuerungen sind Änderungen an der Core Library und eine laut Herausgebern verbesserte Laufzeit. Die Library umfasst das neue embed-Paket: Damit erhalten Go-Entwickler während des Kompilierens durch den Befehl //go:embed Zugriff auf alle ins Programm eingebetteten Dateien.

Als weiteres Highlight gilt die Unterstützung der ARM64-Architektur der neuen Apple-Prozessoren (Apple Silicon) unter macOS. An der Kern-Bibliothek von Go sind offenbar nur kleinere Änderungen zum Tragen gekommen, unter anderem gilt crypto/dsa als veraltet (deprecated) und das unicode-Paket ist jetzt auf Unicode 13.0 aktualisiert. Auch die go get -insecure-Flag zum Abrufen von Repositorys und zum Auflösen benutzerdefinierter Domains über unsichere Schemata wie HTTP ist als Auslaufmodell gekennzeichnet und entfällt in einer der kommenden Versionen.

Die meisten Änderungen betreffen die Go-Befehle: Das Einbetten statischer Dateien und Dateibäume in ausführbare Dateien durch die eingangs erwähnte //go:embed-Anweisung ist ab dem bevorstehenden Release ein Standardmodul. Flankierend akzeptiert go install nun Argumente mit Versionssuffixen. Damit lassen sich Pakete im Modulmodus installieren, ohne auf die go.mod-Datei zurückgreifen zu müssen.

Neu ist auch, dass die -export-Flag (sofern man sie entsprechend einsetzt) die Build-ID des kompilierten Pakets auflisten kann. Zuvor mussten Go-Entwickler dafür etwas umständlicher den Befehl go tool buildid über den zuvor ausgelösten Befehl go list -exported -f{{.Export} laufen lassen – der Extraschritt entfällt.

Beim Testen gibt es nun beim Einsatz der testing.T-Methode einen Warnhinweis für ungültige Tests in den Goroutinen. Auch bei Aufruf von Fatalf, FailNow und Skip{,f,Now} während des Testens mit testing.T oder den testing.B-Benchmarks erscheint gegebenenfalls der Warnhinweis. Aufrufe der genannten Methoden unterbrechen die Ausführung der Goroutinen, nicht aber der Test- oder Benchmark-Funktion, heißt es in den vorläufigen Release Notes, die dafür ein Code-Beispiel bringen:

func TestFoo(t *testing.T) {
    go func() {
        if condition() {
            t.Fatal("oops") // This exits the inner func instead of TestFoo.
        }
        ...
    }()
}

Code, der aus einer Goroutine heraus t.Fatal oder eine ähnliche Methode aufruft, sollten Entwickler neu schreiben. Eine Möglichkeit dazu könnte wie folgt ausschauen:

func TestFoo(t *testing.T) {
    go func() {
        if condition() {
            t.Error("oops")
            return
        }
        ...
    }()
}

Weitere Änderungen betreffen unter anderem die Runtime, die ein stabiles Interface zum Lesen von durch die Implementierung definierten Metriken erhält. Der Compiler kann offenbar Funktionen mit nicht-deklarierten for-Loops inline verarbeiten und der Go Linker gilt als weniger "ressourcenhungrig".

Last but not least, ein Hinweis an Mac-Entwickler: Go 1.16 ist offenbar das letzte Release, das noch auf macOS Sierra läuft. Ab der Folgeversion 1.17 ist macOS 10.13 High Sierra oder eine höhere Version erforderlich.

Weiterführende Hinweise stehen in den Draft Release Notes zu Go 1.16. Die endgültige Fassung soll im Februar 2021 gemeinsam mit dem finalen Release erscheinen. Grundlegende Änderungen an der Sprache sind bis dahin nicht zu erwarten, die Beta befindet sich laut Herausgebern offenbar auf der Zielgeraden.

(sih)