Installing Go from source — Deutsche Übersetzung
- Das Original:
-
https://golang.org/doc/install-source.html
Version of May 26, 2021 - Diese Übersetzung:
-
https://bitloeffel.de/DOC/golang/install-source_20210817_de.html
Stand: 04.08.2021
© 2015-21 Hans-Werner Heinzen @ Bitloeffel.de
Die Nutzung dieses Werks ist unter den Bedingungen der "Creative Commons Attribution 3.0"-Lizenz erlaubt.
Für Fachbegriffe und ähnliches gibt es hier noch eine Wörterliste.
Go installieren (aus den Quellen)
Einführung
Go ist ein quelloffenes Projekt, das unter einer Lizenz ähnlich der BSD-Lizenz veröffentlicht wurde. Dieses Dokument erklärt, wie man an die Quellen herankommt und wie man sie auf dem eigenen Rechner kompiliert und zum Laufen bringt.
Den meisten wird es genügen, stattdessen nur die vorkompilierten Pakete zu installieren, so wie es in "Download and install" (de) beschrieben ist — das ist viel einfacher. Wenn Sie allerdings beim Entwickeln der genannten Pakete mithelfen wollen, dann lesen Sie weiter!
Es gibt zwei offizielle Werkzeugsätze zum Kompilieren von Go.
Dieses Dokument hat den gc
-Go-Compiler und zugehörige Tools im Blick.
Informationen zu dem eher traditionellen Compiler gccgo
,
der das GCC-Back-End benutzt, finden Sie in
"Setting up and using gccgo".
Die Go-Compiler unterstützen die folgenden Befehlssätze.
-
amd64
,386
-
Der
x86
-Befehlssatz, 64- and 32-Bit. -
arm64
,arm
-
Der
ARM
-Befehlssatz, 64-Bit (AArch64
) und 32-Bit. -
mips64
,mips64le
,mips
,mipsle
-
Der
MIPS
-Befehlssatz, Big- und Little-Endian, 64- und 32-Bit. -
ppc64
,ppc64le
- Der 64-Bit-PowerPC-Befehlssatz, Big- und Little-Endian.
-
riscv64
- Der 64-Bit RISC-V-Befehlssatz.
-
s390x
- Die IBM z/-Architektur.
-
wasm
- WebAssembly.
Die Compiler können die Betriebssysteme AIX, Android, DragonFly BSD, FreeBSD, Illumos, Linux, macOS/iOS (Darwin), NetBSD, OpenBSD, Plan 9, Solaris und Windows zum Ziel haben (wenn auch nicht jedes Betriebssystem alle Architekturen unterstützt).
Eine Liste der Portierungen, die als "First Class" angesehen werden, gibt es auf der Wiki-Seite first class ports
Die vollständige Liste möglicher Kombinationen befindet sich weiter unten bei der Diskussion der Umgebungsvariablen.
Auf der Haupt-Installationsseite finden Sie die allgemeinen Systemvoraussetzungen (de). Für Systeme, die nur aus dem Quellkode erzeugt werden können, gilt außerdem noch folgendes:
- Linux auf dem 64-Bit-PowerPC wird erst ab der Kernel-Version 2.6.37 unterstützt, d.h. dass Go auf diesen Systemen CentOS 6 nicht unterstützt.
Installieren Sie die Go-Compiler-Binärdateien als Starthilfe
Der gesamte Go-Werkzeugsatz wurde in Go geschrieben. Um ihn umwandeln zu können,
müssen Sie schon einen Go-Compiler installiert haben.
Die Skripte, die die Werkzeuge erstmalig umwandeln, suchen nach einem Kommando
go
in $PATH
. Wenn Sie also Go auf Ihrem System installiert
und in Ihrem $PATH
konfiguriert haben, sind Sie auch bereit, Go aus
dem Quellkode zusammenzubauen.
Wenn Sie möchten, können Sie aber auch $GOROOT_BOOTSTRAP
auf die
Wurzel Ihrer Go-Installation setzen, um damit den neuen Go-Werkzeugsatz mzu bauen;
$GOROOT_BOOTSTRAP/bin/go
wird dann als go-Kommando benutzt.
Es gibt vier verschiedene Wege, an den Starthilfe-Werkzeugsatz zu kommen:
- Besorgen Sie sich eine aktuelle Binär-Auslieferung von Go.
- Fremdkompilieren Sie einen Werkzeugsatz auf einem System mit funktionierender Go-Installation.
- Benutzen Sie gccgo.
- Kompilieren Sie einen Werkzeugsatz mit Go 1.4; das war die letzte Auslieferung, bei der der Compiler in C geschrieben war.
Diese Wege werden im Folgenden detailliert besprochen.
"Bootstrap"-Werkzeugsatz einer Binär-Auslieferung
Wenn Sie ein Binär-Release als Starthilfe-Werkzeugsatz benutzen wollen, finden Sie die auf der Download-Seite; oder nutzen Sie das Go-Paket einer beliebigen Distribution.
"Bootstrap"-Werkzeugsatz fremdkompiliert aus den Quellen
Um einen "Bootstrap"-Werkzeugsatz aus den Quellen
fremdzukompilieren, was für Systeme nötig ist, für die es kein
Go 1.4 gibt (zum Beispiel linux/ppc64le
),
installieren Sie zunächst Go auf einem anderen System und führen
dann bootstrap.bash aus.
Wenn Sie beispielsweise so starten:
$ GOOS=linux GOARCH=ppc64 ./bootstrap.bash
dann kompiliert bootstrap.bash
einen Werkzeugsatz
für diese GOOS/GOARCH
-Kombination und hinterlässt
den sich ergebenden Ordnerbaum in
../../go-${GOOS}-${GOARCH}-bootstrap
.
Der Baum kann nun zu einer Maschine des angegebenen Zieltyps
kopiert werden und als GOROOT_BOOTSTRAP
genutzt werden, um dort einen lokalen Werkzeugsatz zu erzeugen.
Gccgo als "Bootstrap"-Werkzeugsatz
Um gccgo als "Bootstrap"-Werkzeugsatz nutzen zu können, müssen
Sie dafür sorgen, dass $GOROOT_BOOTSTRAP/bin/go
das Go-Tool ist, das als Teil von gccgo 5 geliefert wird.
Beispielsweise auf Ubuntu Vivid:
$ sudo apt-get install gccgo-5 $ sudo update-alternatives --set go /usr/bin/go-5 $ GOROOT_BOOTSTRAP=/usr ./make.bash
"Bootstrap"-Werkzeugsatz aus den C-Quellen
Um den "Bootstrap"-Werkzeugsatz aus den C-Quelldateien zu bauen, benutzen
Sie entweder aus dem Git-Repositorium den Zweig
release-branch.go1.4
, oder sie besorgen sich
go1.4-bootstrap-20171003.tar.gz,
worin sich der Quellkode von Go 1.4 befindet, mit einer Reihe von Korrekturen,
die dafür sorgen, dass die Werkzeuge auch auf neueren Betriebssystemen laufen.
(Go 1.4 war die letzte Go-Version, deren Compiler in C geschrieben war.)
Nachdem Sie den Go-1.4-Quellkode ausgepackt haben, wechseln Sie zum
Unterordner src
,
setzen Sie die Umgebungsvariable CGO_ENABLED=0
und starten Sie make.bash
,
oder für Windows make.bat
.
Haben Sie die Go-1.4-Quellen erstmal in ihrem GOROOT_BOOTSTRAP-Ordner
ausgepackt, so müssen Sie diese mit git clone
erzeugte Instanz
weiterhin im Zustand release-branch.go1.4
halten.
Versuchen Sie also nicht, sie für den späteren Arbeitsschritt
"Kopieren Sie das Repositorium" wiederzuverwenden. Der Go-1.4-Starthilfe-Werkzeugsatz muss in der Lage sein die Go-1.4-Quellen
dort zu durchsuchen, wo sie sie unterhalb dieses Wurzelverzeichnisses
sucht.
Beachten Sie, dass Go 1.4 nicht auf all den Systemen läuft, auf denen spätere Go-Versionen das tun. Insbesondere unterstützt Go 1.4 nicht die aktuellen macOS-Versionen. Auf solchen Systemen müssen Sie den "Bootstrap"-Werkzeugsatz mit einer der genannten Methoden erzeugen.
Installieren Sie Git, wenn nötig
Für den nächsten Schritt müssen Sie Git installiert haben; kontrollieren Sie also,
ob das Kommando git
zur Verfügung steht.
Haben Sie noch kein arbeitsfähiges Git, folgen Sie den Anweisungen auf der "Git Downloads"-Seite.
(Optional) Installieren Sie einen C-Compiler
Wenn Ihre Go-Installation cgo
unterstützen soll, damit Go-Programme auch C-Bibliotheken importieren können,
so müssen Sie zunächst einen C-Compiler wie gcc
oder clang
installieren. Tun Sie das mit der für Ihr System üblichen Methode.
Um Go ohne cgo
-Unterstützung zu installieren, setzten Sie
CGO_ENABLED=0
bevor Sie all.bash
oder make.bash
(siehe unten) starten.
Kopieren Sie das Repositorium
Go wird in einem Ordner namens go
installiert. Wechseln Sie in den
Ordner, in dem Sie Go installieren wollen, und stellen Sie sicher, dass dort ein
Ordner goroot
noch nicht existiert. Dann klonen Sie das Repositorium
und buchen zur letzten Freigabemarke (zum Beispiel go1.16
) aus:
$ git clone https://go.googlesource.com/go goroot $ cd goroot $ git checkout <marke>
Dabei steht <marke> für den Versionsstring des Releases.
Go wird in dem Ordner installiert, in den es ausgebucht wird. Wird beispielsweise
Go nach $HOME/goroot
ausgebucht, so wandern die Laufzeitmodule nach
$HOME/goroot/bin
. Der Ordner kann beliebig benannt werden -
beachten Sie aber, dass, wenn Sie nach $HOME/go
ausbuchen, das mit
dem Standard für $GOPATH
kollidiert. Siehe unten unter
GOPATH
.
Nicht vergessen: Wenn Sie sich weiter oben für das Kompilieren des
Starthilfe-Werkzeugsatzes aus den Quellen entschieden haben, müssen
Sie hier noch einmal git clone
einsetzen (um bei der
neuesten <Marke>
auszubuchen), denn Sie müssen
das Go-1.4-Repositorium getrennt halten.
(Optional) Wechseln Sie in den "master"-Zweig
Wenn Sie Go-Quellkode verändern und mit Ihren Änderungen zum Projekt beitragen wollen, dann stellen Sie Ihr Repositorium vom "release"-Zweig auf den "master"-Zweig (Entwicklungszweig) um. Wenn nicht, überspringen Sie diesen Schritt.
$ git checkout master
Installieren Sie Go
Um Go zusammenzubauen, geben Sie ein:
$ cd src $ ./all.bash
(In Windows benutzen Sie all.bat
.)
Wenn alles gut geht, wird am Ende etwa folgendes ausgegeben:
ALL TESTS PASSED --- Installed Go for linux/amd64 in /home/you/go. Installed commands in /home/you/go/bin. *** You need to add /home/you/go/bin to your $PATH. ***
Dabei beziehen sich die Details der letzten Zeilen auf Betriebssystem, Architektur und den Ordner, der bei der Installation als Wurzel verwendet wurde.
Weitere Infos darüber, wie man den Zusammenbau steuern kann,
gibt's weiter unten bei der Diskussion der Umgebungsvariablen.
Bei all.bash
(oder all.bat
) laufen auch wichtige Tests,
die eventuell viel mehr Zeit brauchen als das reine Zusammenbauen von Go. Wenn Sie
auf die Tests verzichten wollen, starten Sie alternativ
make.bash
(oder make.bat
).
Testen der Installation
Prüfen Sie die Korrektheit der Installation, indem Sie ein einfaches Programm umwandeln und laufen lassen.
Erzeugen Sie eine Datei mit Namen hello.go
und darin folgendes
Programm:
package main import "fmt" func main() { fmt.Printf("Hallo Welt\n") }
Starten Sie das Programm mit dem Kommando go
:
$ go run hello.go Hallo Welt
Wenn die Nachricht "Hallo Welt" zu sehen ist, dann wurde Go korrekt installiert.
Vorbereiten der Entwicklungsumgebung
Sie sind fast fertig - nur noch wenige vorbereitende Schritte.
How to Write Go Code Learn how to set up and use the Go tools
Das Dokument "How to Write Go Code" ("Wie man mit Go arbeitet") beschreibt wichtige Arbeitsschritte vor dem Benutzen der Go-Werkzeuge.
Installieren von Zusatzwerkzeugen
Der Quellkode verschiedener Go-Werkzeuge, darunter der für
godoc befindet sich in einem getrennten
go.tools-Repositorium.
Um eines der Werkzeuge zu installieren (in diesem Fall godoc
), starten Sie:
$ go get golang.org/x/tools/cmd/godoc
Das Kommando go get
setzt hier das Vorhandensein von
Git voraus.
Außerdem müssen ein Arbeitsbereich (GOPATH
) festgelegt haben; genaueres in
"Wie man mit Go arbeitet".
Die Go-Gemeinde als Ressource
An den üblichen Versammlungsplätzen der Go-Gemeinde, die unter Hilfe gelistet sind, finden Sie aktive Entwickler, die Ihnen bei Problemen beim Installation und Entwickeln helfen können. Wer immer auf dem neuesten Stand sein will, für den empfängt die Verteilerliste golang-checkins für jedes Einbuchen ins Go-Repositorium eine zusammenfassende Nachricht.
Fehler können Sie melden beim Go-Fallbearbeitungssystem.
Schritt halten mit den Freigaben
Neue Freigaben (releases) werden in
golang-announce
angekündigt. Jede Ankündigung enthält die Freigabemarke, zum Beispiel
go1.9
.
Um Ihren Ordnerbaum auf die letzte Freigabe zu aktualisieren, schreiben Sie:
$ cd go/src $ git fetch $ git checkout <marke> $ ./all.bash
Dabei steht <marke> für den Versionsstring des Releases.
(Optional) Umgebungsvariablen
Die Go-Umwandlungsumgebung kann durch Umgebungsvariablen angepasst werden. Es sind zwar keine nötig, aber vielleicht wollen Sie ein paar Voreinstellungen überschreiben.
$GOROOT
Die Wurzel des Go-Verzeichnisbaums — oft ist das
$HOME/go1.X
. Ihr Wert wird während der Umwandlung festgelegt; Vorgabewert ist der Elternordner zum Ordner aus dem herausall.bash
gestartet wurde. Es gibt keinen Grund diese Variable zu setzen, außer dem, zwischen mehreren lokalen Kopien des Repositoriums hin und her schalten zu können.$GOROOT_FINAL
Der Wert, den installierte Binärdateien und Skripte annehmen, solange
$GOROOT
nicht explizit gesetzt wurde; Vorgabewert ist der Wert von$GOROOT
. Wenn Sie den Go-Verzeichnisbaum an einer Stelle bauen, danach aber woanders hin verschieben wollen, so setzen Sie als$GOROOT_FINAL
den entsprechenden Pfad.$GOPATH
In diesen Ordner werden typischerweise Go-Projekte hin ausgebucht, die nicht zur Go-Distribution gehören.Zum Beispiel wird
golang.org/x/tools
wohl in$GOPATH/src/golang.org/x/tools
landen. Laufzeitmodule, die nicht zur Go-Distribution gehören, werden installiert in$GOPATH/bin
(oder in$GOBIN
, wenn das gesetzt ist). Module werden nach$GOPATH/pkg/mod
kopiert und dort zwischengespeichert.Der Standardwert für
$GOPATH
ist$HOME/go
, und es ist nicht nötigGOPATH
explizit zu setzen. Wenn Sie allerdings ihre Go-Distribution nach$HOME/go
ausgebucht haben, müssen Sie mitGOPATH
auf einen anderen Ordner zeigen, um Konflikte zu vermeiden.$GOBIN
In diesem Ordner werden Laufzeitmodule, die nicht zur Go-Distribution gehören, installiert, wenn das Kommando
go
benutzt wird.go get golang.org/x/tools/cmd/godoc
zum Beispiel kopiert, wandelt um und installiert$GOBIN/godoc
. Standardwert für$GOBIN
ist$GOPATH/bin
(oder$HOME/go/bin
, wennGOPATH
nicht gesetzt wurde). Nach einer solchen Installation möchten Sie sicher diesen Ordner Ihrer Umgebungsvariablen$PATH
hinzufügen, um die installierten Tools benutzen zu können.Beachten Sie, dass die Laufzeitmodule der Go-Distribution nicht in
$GOBIN
, sondern in$GOROOT/bin
(Laufzeitmodule, die manuell gestartet werden) oder in$GOTOOLDIR
(Laufzeitmodule, die vomgo
-Kommando gerufen werden; Standardwert ist hier$GOROOT/pkg/$GOOS_GOARCH
).$GOOS
und$GOARCH
Der Name des Zielsystems sowie dessen Architektur. Vorgabe sind die Werte von
$GOHOSTOS
bzw.$GOHOSTARCH
, die weiter unten beschrieben sind.Mögliche Werte für
$GOOS
sindandroid
,darwin
,dragonfly
,freebsd
,illumos
,ios
,js
,linux
,netbsd
,openbsd
,plan9
,solaris
undwindows
.Mögliche Werte für
$GOARCH
sindamd64
(64-Bit x86, am weitesten gereift),386
(32-Bit x86),arm
(32-Bit ARM),arm64
(64-Bit ARM),ppc64le
(PowerPC 64-Bit, Little-Endian),ppc64
(PowerPC 64-Bit, Big-Endian),mips64le
(MIPS 64-Bit, Little-Endian),mips64
(MIPS 64-Bit, Big-Endian),mipsle
(MIPS 32-Bit, Little-Endian),mips
(MIPS 32-Bit, Big-Endian),s390x
(IBM System z 64-Bit, Big-Endian) undwasm
(WebAssembly 32-Bit).Die gültigen Kombinationen von
$GOOS
und$GOARCH
sind:$GOOS
$GOARCH
aix
ppc64
android
386
android
amd64
android
arm
android
arm64
darwin
amd64
darwin
arm64
dragonfly
amd64
freebsd
386
freebsd
amd64
freebsd
arm
illumos
amd64
ios
arm64
js
wasm
linux
386
linux
amd64
linux
arm
linux
arm64
linux
ppc64
linux
ppc64le
linux
mips
linux
mipsle
linux
mips64
linux
mips64le
linux
riscv64
linux
s390x
netbsd
386
netbsd
amd64
netbsd
arm
openbsd
386
openbsd
amd64
openbsd
arm
openbsd
arm64
plan9
386
plan9
amd64
plan9
arm
solaris
amd64
windows
386
windows
amd64
$GOHOSTOS
and$GOHOSTARCH
Der Name des Quellsystems sowie dessen Architektur. Vorgabe sind das Betriebssystem und die Architektur des lokalen Systems.
Mögliche Werte sind diegleichen wie in der Liste oben für
$GOOS
und$GOARCH
. Die angegebenen Werte müssen mit dem lokalen System kompatibel sein; zum Beispiel können Sie auf einem x86-System$GOHOSTARCH
nicht zuarm
setzen.$GO386
(nur für386
; Vorgabewert istsse2
)Diese Variable legt fest, wie gc Gleitkommarechnung implementiert.
GO386=softfloat
: Benutze durch Software bereitgestellte Gleitkommaoperationen; das sollte alle x86-Chips (Pentium MMX oder neuer) unterstützen.GO386=sse2
: Benutze SSE2 für Gleitkommaoperationen; ist performanter als 387, aber erst für Pentium 4/Opteron/Athlon 64 oder neuere verfügbar.
$GOARM
(nur fürarm
; Vorgabewert wird automatisch ermittelt, wenn auf dem Zielprozessor kompiliert wird, sonst6
.)Das setzt die Version der ARM-Gleitkomma-Koprozessorarchitektur. Wenn Sie auf dem Zielsystem kompilieren, wird der Wert automatisch ermittelt.
GOARM=5
: Benutze Software-Gleitkommaoperationen; wenn die CPU keinen Gleitkomma-Koprozessor besitztGOARM=6
: Benutze ausschließlich VFPv1; Vorgabe, wenn fremdkompiliert (cross-compiling) wird; üblicherweise ARM11-Kerne oder besser (VFPv2 oder besser wird auch unterstützt)GOARM=7
: Benutze VFPv3; üblicherweise Cortex-A-Kerne
Lassen Sie das im Zweifelsfall unangetastet, und passen Sie erst an, wenn's beim ersten Ausführen der Binärdatei nötig werden sollte. Der Wiki-Artikel zum Stichwort GoARM enthält weitere Details bezüglich Gos ARM-Unterstützung.
$GOMIPS
(nurmips
undmipsle
)
$GOMIPS64
(nurmips64
undmips64le
)Diese Variablen legen fest, ob Gleitkommabefehle benutzt werden. Ist "
hardfloat
" gesetzt, werden die Gleitkommabefehle der CPU benutzt; das ist auch die Standardeinstellung. Ist "softfloat
" gesetzt, simuliert Software die Gleitkommabefehle.$GOPPC64
(nurppc64
undppc64le
)Diese Variable legt die Prozessorversion (Version der Befehlsmenge der Architektur) als Ziel für den Compiler fest. Standardwert ist
power8
.GOPPC64=power8
: generiere ISA-v2.07-BefehleGOPPC64=power9
: generiere ISA-v3.00-Befehle
$GOWASM
(nurwasm
)Diese Variable enthält eine durch Kommas unterteilte Liste von experimentellen WebAssembly-Eigenschaften, die in der kompilierten WebAssembly-Binärdatei enthalten sein dürfen. Standard ist, keine experimentellen Eigenschaften zu benutzen.
GOWASM=satconv
: generiere saturating (non-trapping) float-to-int KonversionenGOWASM=signext
: generiere sign-extension Operatoren
Beachten Sie, dass $GOARCH
und $GOOS
für das
Zielsystem stehen, nicht für Ihre Entwicklungsumgebung.
Das bedeutet, dass es sich eigentlich immer um Fremdkompilieren handelt.
Mit Architektur ist die Art Binärdatei gemeint, die auf einem Zielsystem laufen
kann: Auf einem x86-64-System, auf dem nur ein 32-Bit-Betriebssystem läuft,
muss GOARCH
auf 386
(und nicht amd64
)
gesetzt sein.
Wenn Sie Vorgabewerte überschreiben wollen, tun Sie das in Ihrer Shell-Profildatei
($HOME/.bashrc
, $HOME/.profile
oder einer Entsprechung).
Das mag dann so aussehen:
export GOARCH=amd64 export GOOS=linux
Allerdings, um's nochmal zu wiederholen: Keine dieser Variablen muss fürs Kompilieren, Installieren oder Weiterentwickeln des Go-Verzeichnisbaums gesetzt werden!