Während es für die Sprache selbst keine großen Änderungen gibt, baut Go 1.10 einige Neuerungen in das “go build”-Kommando ein. Strings lassen sich nun zudem direkt von Go an C weiterleiten, jüngst gebaute Pakete landen aus Performancegründen in einem eigenen Cache.
Der Cache für die erzeugten Pakete ist nun in das “go build”-Kommando eingebaut, aber auch in “go test”. Go trennt diesen Cache von dem für installierte Pakete. Der Vorteil zeigt sich bei Buildvorgängen: Sie laufen wesentlich schneller ab, wenn sie keine neuen Pakete installieren müssen oder beim Wechsel zwischen verschiedenen Quellcode-Kopien, etwa in VCS-Branches. Die Schnellbauoption “-i” macht der neue Cache auch überflüssig. Der Befehl “go test” führt hingegen den vorherigen Test erneut aus und zeigt an, dass die Ergebnisse aus dem Cache stammen. Ein “-count=1” ignoriert den Cache.
Veraltete Pakete entdeckt das “go build”-Kommando in der neuen Version ebenfalls automatisch. Dazu prüft das Tool die Inhalte der Quelldateien, die Build Flags und die Metadaten in den kompilierten Paketen. Die Modifikationszeit spielt hingegen keine Rolle mehr, Builds wissen jetzt automatisch, wenn ein Paket neu gebaut werden muss.
Die “go build”-Flags “-asmflags”, “-gcflags”, “-gccgoflags” und “-ldflags” wirken sich jetzt nur noch auf die in der Kommandozeile angegebenen Pakete aus, nicht mehr zusätzlich auf die davon abhängigen Pakete. Um Pakete nach einem bestimmten Muster zu treffen, wählt der Entwickler die neue Form: “-asmflags=pattern=flags”, die analog auch mit den anderen erwähnten Flags funktioniert. Mehr Details verrät “go help build”. Ähnlich verhält es sich übrigens mit “go install”, das nun auch nur noch die auf der Kommandozeile explizit erwähnten Pakete und Kommandos installiert.
Intelligentere Umgebungsvariablen
Eine neue Umgebungsvariable “$GOTMPDIR” lässt sich setzen, um temporäre Dateien in einem anderen Ordner als dem Temp-Verzeichnis des Systems zu erzeugen. Setzt der Admin keine “$GOROOT”-Variable, versucht das Tool nun erstmal, den GOROOT-Pfad selbst aufzuspüren. Dadurch lassen sich Binär-Distributionen überall im Dateisystem entpacken, auch ohne zuvor “$GOROOT” zu setzen.
Go und C verstehen sich besser
Wer C-Code schreibt, darf nun in der C-Preambel über “_GoString_” auf Stringwerte in seinem Go-Programm zugreifen. “_GoStringLen” und “_GoStringPtr” erlauben den direkten Zugriff auf Inhalte des Strings. Ein “_GoString_”-Wert lässt sich zudem an eine Go-Funktion weiterreichen, die Strings akzeptiert. Weitere Details zu Cgo und zu den weiteren Änderungen an der neuen Version, verrät die Release-Mitteilung.




